【问题标题】:Column mapping with Abstract class (TPT with existing tables)抽象类的列映射(现有表的 TPT)
【发布时间】:2011-09-29 14:21:24
【问题描述】:

我正在针对现有数据库进行开发,在将我的抽象类作为 TPT 映射到我的表时遇到问题。这引发了一个错误,提示“无效的列名“ID””。

简单类如下

public abstract class Member 
{
    [DisplayName("ID")]
    public string ID { get; set; }

    [DisplayName("Date Applied")]
    public System.DateTime? DateApplied { get; set; }

    [DisplayName("Date Membered")]
    public System.DateTime? DateMembered { get; set; }

    [DisplayName("Member Type")]
    public int MemberTypeFlag { get; set; }

}


public class Person : Member
{
    [DisplayName("Last Name")]
    public string LastName { get; set; }

    [DisplayName("First Name")]
    public string FirstName { get; set; }

    [DisplayName("Date Of Birth")]
    public System.DateTime DateOfBirth { get; set; }
}

并映射到我的自定义表格如下

public class MapMember : EntityTypeConfiguration<Member>
{
    public MapMember()
        : base()
    {
        HasKey(b => b.ID).Property(b => b.ID).HasColumnName("ID");
        Property(b => b.DateApplied).HasColumnName("DTM_APPLIED");
        Property(b => b.DateMembered).HasColumnName("DTM_MEMBERED");
        Property(b => b.MemberTypeFlag).HasColumnName("MBR_TYPE_FLG");
        ToTable("MBR");
    }
}

public class MapPerson : EntityTypeConfiguration<Person>
{
    public MapPerson()
        : base()
    {
        Property(p => p.LastName).HasColumnName("LNAME");
        Property(p => p.FirstName).HasColumnName("FNAME");
        Property(p => p.DateOfBirth).HasColumnName("DOB");
        Property(p => p.FirstName).HasColumnName("FNAME");
        ToTable("MBR_PERSON");
    }
}

但是,在 db.savechanges() 上引发了无效的列名“ID”。

请指教。

谢谢

【问题讨论】:

    标签: asp.net-mvc-3 entity-framework-4 ef-code-first


    【解决方案1】:

    如果你的MBR_PERSON表中的主键列(同时必须是MBR表的外键)没有列名ID(键名表MBR 中的列)。在 TPT 映射中,抽象实体的根表的主键列必须与派生实体的表的主键列同名。

    【讨论】:

    • 感谢您指出这一点,这几天一直在想。对于这样的事情,是否会有任何关于 DOs 和 Donts 的链接。
    • @roggss:我不知道关于这个的真正全面的资源(绝对不是关于 Donts)。但这一点实际上是 EF Code-First 的配置选项中的一个漏洞,因为您无法为派生实体的表配置键列名称。我不止一次看到,由于这个限制,人们在使用现有数据库创建 TPT 映射时遇到问题。
    • 非常感谢,。你真的帮了我很多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多