2011-12-20 6 views
8

Tengo una asignación fluida de una clase de dominio que define los nombres de cada columna, incluida la clave principal formada por dos columnas, NotificationId e IdentityId. Estas son también claves foráneas que apuntan a Notification.Id y Identity.Id respectivamente. Cada vez que uso esta asignación como parte de una consulta, genera una consulta sql con un guión bajo entre Notification e Id (Notification_Id) que no se menciona en ninguna parte de mis asignaciones.Code First Entity Framework agrega un guión bajo al nombre de la columna de la clave principal

Espero que haya alguna convención que diga que las claves primarias o las claves externas deberían verse así, pero parece extraño dado que le he dicho explícitamente cuál es el nombre de la columna para NotificationId.

Cualquier ayuda sería apreciada.

archivo de asignación Agregado

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

Parece que la propiedad de navegación no está asociada con las propiedades de clave principal. Pero no puedo estar seguro sin mirar su entidad y su mapeo. – Eranga

+0

Esas columnas con guiones bajos no son claves primarias, sino claves externas. Muestra tu mapeo para aclarar tu pregunta. –

+0

Mostrar también entidades de identidad y notificación. –

Respuesta

9

he cometido un error estúpido, encontró la respuesta en Entity Framework 4.1 Code First Foreign Key Id's

he añadido lo siguiente:

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

a la entidad notificación y no mapa es

La solución era cambiar

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

a

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