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");
}
}
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
Te kolumny z podkreśleniami nie są kluczami podstawowymi, lecz kluczami obcymi. Pokaż swoje mapowanie, aby wyjaśnić swoje pytanie. –
Pokaż również elementy tożsamości i powiadomień. –