Ho una mappatura fluente di una classe di dominio che definisce i nomi per ogni colonna inclusa la chiave primaria costituita da due colonne, NotificationId e IdentityId. Queste sono anche chiavi esterne che puntano a Notification.Id e Identity.Id rispettivamente. Ogni volta che utilizzo questa associazione come parte di una query, genera una query sql con un trattino basso tra Notification e Id (Notification_Id) che non è menzionato da nessuna parte nei miei mapping.Code First Entity Framework aggiunge un trattino di sottolineatura a un nome di colonna chiave primaria
Mi aspetterei che ci possa essere qualche convenzione che dice che le chiavi primarie o le chiavi esterne dovrebbero assomigliare a questo, ma sembra strano dato che ho detto esplicitamente quale sia il nome della colonna per NotificationId.
Qualsiasi aiuto sarebbe apprezzato.
file di mapping Aggiunto
public class Notifications_IdentitiesMap : EntityTypeConfiguration<Notifications_Identities>
{
public Notifications_IdentitiesMap()
{
ToTable("Notifications.Notifications_Identities");
HasKey(x => new { x.NotificationId,x.IdentityId });
Property(x => x.IdentityId).HasColumnName("IdentityId").HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Property(x => x.NotificationId).HasColumnName("NotificationId").HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Property(x => x.SendAttempts).HasColumnName("SendAttempts");
Property(x => x.IsSent).HasColumnName("IsSent");
Property(x => x.LastSendAttempt).HasColumnName("LastSendAttempt");
HasRequired(x => x.Notification).WithMany().HasForeignKey(x => x.NotificationId);
HasRequired(x => x.Identity).WithMany().HasForeignKey(x => x.IdentityId);
}
}
public class Notifications_Identities
{
public Notifications_Identities()
{
}
public Notifications_Identities(Notification notification, int identityId)
{
Notification = notification;
IdentityId = identityId;
}
public virtual int IdentityId { get; set; }
public virtual int NotificationId { get; set; }
public virtual int SendAttempts { get; set; }
public virtual DateTime? LastSendAttempt { get; set; }
public virtual Identities.Identity Identity { get; set; }
public virtual Notification Notification { get; set; }
public bool IsSent { get; set; }
}
public class NotificationMap:EntityTypeConfiguration<Notification>
{
public NotificationMap()
{
ToTable("Notifications.Notifications");
Property(x => x.Id).HasColumnName("Id");
Property(x => x.Subject).HasColumnName("Subject").HasMaxLength(255);
Property(x => x.Message).HasColumnName("Message");
Property(x => x.TypeId).HasColumnName("TypeId");
Property(x => x.DateCreated).HasColumnName("DateCreated");
Property(x => x.CreatorIdentityId).HasColumnName("CreatorIdentityId");
HasRequired(x => x.Creator).WithMany().HasForeignKey(x => x.CreatorIdentityId);
}
}
public class IdentityMap : EntityTypeConfiguration<RM.Domain.Identities.Identity>
{
public IdentityMap()
{
Property(x => x.Id).HasColumnName("IDENTITYID").HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(x => x.FirstName).HasColumnName("firstname");
Property(x => x.Surname).HasColumnName("surname");
Property(x => x.Username).HasColumnName("username");
Property(x => x.IsGroup).HasColumnName("is_group");
Property(x => x.EmailAddress).HasColumnName("email");
Property(x => x.ActiveDirectoryId).HasColumnName("ActiveDirectoryId");
Property(x => x.IsLive).HasColumnName("is_active");
ToTable("dbo.rm_tbl_IDENTITY_Identities");
}
}
Sembra che la proprietà di navigazione non è associato con le proprietà di chiave primaria. Ma non posso essere sicuro senza guardare la tua entità e la sua mappatura. – Eranga
Quelle colonne con caratteri di sottolineatura non sono chiavi primarie ma chiavi esterne. Mostra la tua mappatura per chiarire la tua domanda. –
Mostra anche le identità e le entità di notifica. –