2011-04-03 102 views
2

由于继承,我在实体框架中遇到了一些问题。 所以,我有这样的事情数据库:实体框架继承和持久列

PROFILE 
Id int identity [PK] 
ProfileTypeId int [FK] [PK] 

PROFILETYPE 
Id int [PK] 

COMPANY 
ProfileId int [FK] [PK] 
ProfileTypeId AS 1 PERSISTED [FK] [PK] 

PERSON 
ProfileId int [FK] [PK] 
ProfileTypeId AS 2 PERSISTED [FK] [PK] 

我要实现继承,一个配置文件可以是一个公司或个人,它是唯一的,所以FK在公司简档和ProfileTypeId到的个人资料,它独家。

但是当我尝试在实体框架中创建一个公司时,它违反PROFILE中PROFINETYPE的PROFILE中的FK。可能是因为在公司中ProfileTypeId是持久的,它没有填充PROFILE中的值,有没有人知道一种解决方法来使其与实体框架一起工作?

谢谢!

回答

0

有这个数据库模式两个非常大的问题:

  1. ProfileTypeId在派生表是因为在父表ProfileTypeId的计算列将作为计算列中也可以操作。 EF不允许主键中的计算列。即使它允许他们你的情况将无法正常工作。您将无法插入CompanyPerson,因为EF永远不会将计算列的值发送到数据库。因此插入将会违反外键,因为Profile将始终将ProfileTypeId设置为空。
  2. EF不允许外键为计算列。

结论:你不能在EF中映射它。

您必须删除ProfileTypeId和ProfileType,因为该信息对于EF是完全冗余的,或者您可以尝试在这些表的顶部构建一些视图,并将该视图映射为按层次结构表(TPH)并使用存储过程或instead of触发器将数据插入到表中。

+0

我已经摆脱它,但期待一些解决方法回去;)谢谢! – TrymBeast 2011-04-03 22:17:47