我有一个包含两个表的现有数据库:MemData和MemPhone。
MemData具有以下结构
uidMemberId (PK, uniqueidentifier not null)
strFirstName (varchar(50), null)
strLastName (varchar(50), null)
MemPhone具有以下结构
uidMemberId (uniqueidentifier not null)
strPhoneNumber (varchar(50), null)
MemberPhoneNumber表上没有PK。这两个表由uidMemberId连接,但数据库中没有设置外键。
我的MemData模型如下所示:
[Table("MemData")]
public class Member
{
[Key]
public Guid MemberId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual IList<MemberPhoneNumber> MemberPhoneNumbers { get; set; }
}
配置图如下所示:
public MemberMap()
{
Property(t => t.MemberId).HasColumnName("uidMemberID");
Property(t => t.FirstName).HasColumnName("strFirstName");
Property(t => t.LastName).HasColumnName("strLastName");
HasMany(x => x.MemberPhoneNumbers);
}
我的MemPhone模型如下所示:
[Table("MemPhone")]
public class MemberPhoneNumber
{
[Key]
public Guid MemberId { get; set; }
public string PhoneNumber { get; set; }
public virtual Member Member { get; set; }
}
配置图如下所示:
public MemberPhoneNumberMap()
{
Property(t => t.MemberId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Property(t => t.MemberId).HasColumnName("uidMemberID");
Property(t => t.PhoneNumber).HasColumnName("strPhone");
}
在我的MVC应用程序中,当我打电话
Uow.Members.GetAll().Include(p => p.MemberPhoneNumbers).ToList()
我收到以下错误
Invalid column name 'Member_MemberId'.
它应该寻找MemData_uidMemberId,但我无法弄清楚我在配置中错过了什么。
由于
答案 0 :(得分:1)
默认情况下,外键名称为 propertyName _ entityId 。这就是EF尝试映射到Member_MemberId列的原因。为一对多关系提供外键配置
public class MemberMap : EntityTypeConfiguration<Member>
{
public MemberMap()
{
ToTable("MemData");
HasKey(m => m.MemberId);
Property(m => m.MemberId).HasColumnName("uidMemberID");
Property(m => m.FirstName).HasColumnName("strFirstName");
Property(m => m.LastName).HasColumnName("strLastName");
HasMany(x => x.MemberPhoneNumbers)
.WithRequired(p => p.Member)
.HasForeignKey(p => p.MemberId);
}
}
另外请记住,您可以使用流畅的配置配置密钥和表,您不需要使用数据注释属性污染您的实体。