2011-12-20 14 views
8

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"); 
     } 
    } 
+0

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

+0

Quelle colonne con caratteri di sottolineatura non sono chiavi primarie ma chiavi esterne. Mostra la tua mappatura per chiarire la tua domanda. –

+0

Mostra anche le identità e le entità di notifica. –

risposta

9

Ho fatto un errore stupido, ha trovato la risposta nel Entity Framework 4.1 Code First Foreign Key Id's

ho aggiunto il seguente:

public virtual ICollection<Notifications_Identities> Identities { get; set; } 

per l'entità di notifica e non mappare it

La soluzione era cambiare

HasRequired(x => x.Notification).WithMany().HasForeignKey(x => x.NotificationId); 

a

HasRequired(x => x.Notification).WithMany(x=>x.Identities).HasForeignKey(x => x.NotificationId); 
Problemi correlati