我有一个域类的流畅映射,它定义了每列的名称,包括由两列组成的主键,NotificationId 和 IdentityId。这些也是分别指向Notification.Id和Identity.Id的外键。每当我使用此映射作为查询的一部分时,它都会生成一个 sql 查询,该查询在通知和 Id (Notification_Id) 之间有一个下划线,该查询在我的映射中没有提及。
我希望可能有一些约定表明主键或外键应该像这样,但考虑到我已经明确告诉它NotificationId 的列名是什么,这似乎很奇怪。
任何帮助,将不胜感激。
添加了映射文件
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");
}
}
我犯了一个愚蠢的错误,找到了答案实体框架 4.1 代码优先外键 ID https://stackoverflow.com/questions/5656159/entity-framework-4-1-code-first-foreign-key-ids
我添加了以下内容:
public virtual ICollection<Notifications_Identities> Identities { get; set; }
到通知实体并且没有映射它
解决办法是改变
HasRequired(x => x.Notification).WithMany().HasForeignKey(x => x.NotificationId);
to
HasRequired(x => x.Notification).WithMany(x=>x.Identities).HasForeignKey(x => x.NotificationId);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)