0
我正在针对现有的数据库进行开发,将我的抽象类映射为TPT,从而引发错误,指出“无效列名”ID“”。抽象类(带有现有表的TPT)的列映射
简单类如下
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");
}
}
但是无效的列名 “ID” 后db.savechanges提出()。
请指教。
感谢
感谢您指出这一点,一直在想这几天。对于这样的事情,是否会有DOs和Donts的任何链接。 – roggss
@roggss:我不知道一个关于这个的真正全面的资源(绝对不是关于这个Donts)。但是,这一点实际上是EF Code-First的配置选项中的一个漏洞,因为您无法配置派生实体的表的键列名称。由于这种限制,我不止一次看到人们在创建与现有数据库的TPT映射时遇到问题。 – Slauma
非常感谢你。你真的帮了我很多。 – roggss