gpt4 book ai didi

c# - Entity Framework 继承和持久化列

转载 作者:太空宇宙 更新时间:2023-11-03 16:47:10 26 4
gpt4 key购买 nike

由于继承,我在 Entity Framework 中遇到了一些问题。所以,我有类似这个数据库的东西:

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]

我想实现继承,一个PROFILE可以是COMPANY也可以是PERSON,而且是独占的,所以COMPANY中的FK是ProfileId和ProfileTypeId到PROFILE使其独占。

但是当我尝试在 Entity Framework 中创建公司时,它违反了 PROFILE 到 PROFILETYPE 中的 FK。可能是因为在 COMPANY 中 ProfileTypeId 是持久的,它没有填充 PROFILE 中的值,有没有人知道使其与 Entity Framework 一起工作的解决方法?

谢谢!

最佳答案

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

    派生表中的
  1. ProfileTypeId 是计算列,因为父表中的 ProfileTypeId 也将作为计算列处理。 EF 不允许在主键中使用计算列。即使它允许他们,您的方案也不会起作用。您将无法插入 CompanyPerson,因为 EF 从不将计算列的值发送到数据库。因此插入将违反外键,因为 Profile 将始终将 ProfileTypeId 设置为 null。
  2. EF 不允许外键成为计算列。

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

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

关于c# - Entity Framework 继承和持久化列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5532592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com