C# 实体框架代码优先映射情况

C# 实体框架代码优先映射情况,c#,entity-framework,ef-code-first,C#,Entity Framework,Ef Code First,我尝试先使用EF4.3代码将现有应用程序(使用纯ADO.Net)移植到新应用程序。值得一提的是,这是我第一次使用EF 基本上我有一个suppliers表,但有两个specialization表,其属性特定于这两种类型的供应商 以下是现有数据库的外观: create table Supplier( id_supplier int not null identity --Bunch of other attributes ); create table Individual( id_individ

我尝试先使用EF4.3代码将现有应用程序(使用纯ADO.Net)移植到新应用程序。值得一提的是,这是我第一次使用EF

基本上我有一个suppliers表,但有两个specialization表,其属性特定于这两种类型的供应商

以下是现有数据库的外观:

create table Supplier(
id_supplier int not null identity
--Bunch of other attributes
);

create table Individual(
id_individual int not null --not identity, gets the same value as the Supplier table
--Attributes specific to individuals
);

alter table Individual add constraint fk_individual_supplier
foreign key(id_individual) references Supplier(id_supplier);

create table Corporation(
id_corporation int not null --not identity, gets the same value as the Supplier table
--Attributes specific to corporations
);

alter table Corporation add constraint fk_corporation_supplier
foreign key(id_corporation) references Supplier(id_supplier);
因此,如表所示,供应商可以是个人也可以是公司

现有应用程序如下所示:

  • 抽象类及其属性
  • 使用附加属性对从供应商派生的个人进行分类
  • 从供应商及其附加属性派生的类别公司
Ado.Net代码当前用于接收供应商对象,如果传递的对象为单独类型,则在单个表上生成记录;如果传递的对象为公司类型,则在公司表上生成记录

因此,关于供应商的每一份记录都将有一份关于个人或公司的匹配记录。此外,单个表和公司表没有指向数据库任何其他表的外键。相反,这些关系都与供应商表有关。生成ID的表是Supplier

我怎样才能先用代码映射它

起初,我想保留我的结构,我的意思是,供应商抽象类,以及由此衍生的个人和公司。因为我需要首先在供应商表上插入实体(generate identity字段),所以个人和公司模型类似乎都将映射到供应商表

但是,它如何能够接收抽象类并根据类型在其中一个专门化表上插入呢?如果没有自定义SQL,我认为这是不可能的,这使我认为我的方法是错误的


提前感谢您的帮助。

这听起来像是“每种类型的表”继承(TPT)。对于TPT,有一个基表,其中列对于所有派生类型都是通用的,每个派生类型的表都有特定于类型的列。实体框架支持这个模型。有关如何使用数据注释和流畅映射的示例,请参阅优秀的博客文章。

这是我100%的情况。谢谢!