3

我有一个包含两个表的现有数据库: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 但我无法弄清楚我在配置中错过了什么。

谢谢

4

1 回答 1

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);
    }
}

另外请记住,您可以使用流畅的配置配置键和表,您不需要使用数据注释属性污染您的实体。

于 2013-08-21T20:06:57.890 回答