2011-12-20 5 views
8

Mam płynne odwzorowanie klasy domeny, która definiuje nazwy dla każdej kolumny, w tym klucz podstawowy, który składa się z dwóch kolumn, NotificationId i IdentityId. Są to również klucze obce wskazujące odpowiednio na Notification.Id i Identity.Id. Kiedykolwiek używam tego odwzorowania jako części zapytania, generuje ono kwerendę sql z podkreśleniem pomiędzy powiadomieniami a Id (powiadomienie_Id), które nie są nigdzie wspomniane w moich mapowaniach.Kod First Entity Framework dodaje podkreślenie do podstawowej nazwy kolumny klucza

Spodziewam się, że może istnieć jakaś konwencja, która mówi, że klucze główne lub klucze obce powinny wyglądać tak, ale wydaje się dziwne, ponieważ wyraźnie powiedziałem im, jaka jest nazwa kolumny dla NotificationId.

Każda pomoc zostanie doceniona.

Dodany plik odwzorowania

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

Wygląda nieruchomości nawigacyjnej nie jest związany z głównych kluczowych właściwości. Ale nie można być pewnym bez patrzenia na twój obiekt i jego mapowanie. – Eranga

+0

Te kolumny z podkreśleniami nie są kluczami podstawowymi, lecz kluczami obcymi. Pokaż swoje mapowanie, aby wyjaśnić swoje pytanie. –

+0

Pokaż również elementy tożsamości i powiadomień. –

Odpowiedz

9

popełniłem głupi błąd, znalazł odpowiedź w Entity Framework 4.1 Code First Foreign Key Id's

dodałem następujące:

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

podmiotowi powiadomień i nie map to

Poprawka miała zmienić

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

do

HasRequired(x => x.Notification).WithMany(x=>x.Identities).HasForeignKey(x => x.NotificationId); 
Powiązane problemy