我正在尝试使用 EF 4.3 Code First 将现有应用程序(使用纯 ADO.Net)移植到新应用程序。值得一提的是,这是我第一次使用 EF。
基本上我有一个供应商表,但有两个专业化表,其属性特定于两种类型的供应商。
这是现有数据库的样子:
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);
因此,如表格所示,供应商可以是个人或公司。
现有的应用程序是这样的:
- 抽象类供应商及其属性
- 类从供应商派生的个体及其附加属性
- 类 Corporation 派生自 Supplier 及其附加属性
Ado.Net 代码当前用于接收供应商对象,如果传递的对象是个人类型,则在个人表上生成记录,如果传递的对象是公司类型,则在公司表上生成记录。
因此,供应商上的每条记录都将在个人或公司上具有匹配的记录。此外,个人和公司表没有任何其他数据库表的外键。相反,关系都与供应商表。生成 ID 的表是供应商。
如何使用 Code First 进行映射?
起初我考虑保留我的结构,我的意思是,Supplier 抽象类以及由此派生的个人和公司。因为我需要实体首先在供应商表上插入(生成标识字段),所以个人和公司模型类似乎都将映射到供应商表。
但是它怎么可能接收抽象类并根据类型插入到任一专业化表中呢?如果没有自定义 SQL,我认为这是不可能的,这让我认为我的方法是错误的。
提前感谢您的帮助。