针对旧数据库使用 Entity Framework 4.1,我无法生成一组非复数的 TPT 继承模型工作集,并且对公共主键使用不同的名称。
我正在使用数据库表“组织”、“帐户”和“公司”,如下所示:
Organization
OrganizationID (int PK)
OrgName (varchar)
Company
CompanyID (int PK)
CompanyNo (varchar)
Account
AccountID (int PK)
AccountNo (varchar)
Account.AccountID 和 Company.CompanyID 具有 FK 约束,即这些列中的值也必须包含在 Organization.OrganizationID 中,因此如果没有 Organization 行,则两者都不能存在。如果我从头开始设计这些表,Account 和 Company 都会使用 OrganizationID 作为其主键。
public partial class BusinessEntities : DbContext
{
public BusinessEntities()
: base("name=BusinessEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Organization>().ToTable("Organization");
// Override pluralization
modelBuilder.Entity<Company>().ToTable("Company");
modelBuilder.Entity<Account>().ToTable("Account");
// Set primary key column for each
modelBuilder.Entity<Company>().Property(
e => e.OrganizationID).HasColumnName("CompanyID");
modelBuilder.Entity<Account>().Property(
e => e.OrganizationID).HasColumnName("AccountID");
}
public DbSet<Organization> Organization { get; set; }
}
public partial class Organization
{
public int OrganizationID { get; set; }
public string OrgName { get; set; }
}
public partial class Account : Organization
{
public string AccountNo { get; set; }
}
public partial class Company : Organization
{
public string CompanyNo { get; set; }
}
当我尝试使用下面列出的简单选择代码时,我收到错误:
属性“OrganizationID”不是
声明属性为“Company”类型。
确认该房产没有被
明确从模型中排除
使用忽略方法或
NotMappedAttribute 数据注释。
确保它是一个有效的原语
财产。
static void Main(string[] args)
{
using (var context = new BusinessEntities())
{
foreach (var b in context.Organization.OfType<Company>())
{
Console.WriteLine("{0} {1}", b.CompanyNo, b.OrgName);
}
foreach (var b in context.Organization.OfType<Account>())
{
Console.WriteLine("{0} {1}", b.AccountNo, b.OrgName);
}
}
Console.ReadLine();
}