gpt4 book ai didi

database - Entity Framework : Multiple Inheritance

转载 作者:搜寻专家 更新时间:2023-10-30 20:45:35 24 4
gpt4 key购买 nike

好吧,显然我在这里与 .net 作斗争......答案可能是我找错了树,应该继续使用我 5 年前会使用的那种数据库设计。

我想要的是有一个抽象对象 Client 和 2 个继承对象 Supplier 和 Customer。

客户与供应商和客户的关系是1:0/1

这似乎意味着基于继承的解决方案会很好地工作,因为它使我能够编写更少的验证代码并利用强类型集合。

然而,开箱即用的 Entity Framework 坚持在客户表上使用唯一 ID,并拒绝让您从客户和供应商表中引用相同的 ID。

当您进入数据库并手动编辑此 ID 以使其在两个继承对象上相同时,您会遇到问题,因为客户端集合存在索引冲突(这并不奇怪)。

结果是我不能让客户既是供应商又是客户(我对 2 个独立对象共享相同 ID 的想法很满意)。

这引出了一个设计问题,即如何最好地模拟这种情况……我面临着必须为“isCustomer”、“isSupplier”或连接到的供应商和客户表执行条件连接和 bool 字段的风险客户端并编写代码来维护与它的 0-1 关系。

其他人一定有这种问题吗?没有优雅的解决方案?

替代方案:我需要同一对象的多个 View 。这意味着我不能简单地在一个字段上使用整数值来确定允许哪些 View 。我需要使用多个 bool 字段来确定允许哪些对象 View 。

这在 EF 中可行吗?显然我可以在数据库中创建 View ,但我宁愿从 EF 中创建 View 并让它创建 SQL。 (虽然我已经定义了 sp 以在数据库中设置各种键和约束,但这意味着我越来越倾向于放弃使用 EF 来生成我的模式)

最佳答案

不幸的是,您所要求的实际上是不可能的。 .NET 不允许多重继承,因此这不是(也不会是)EF 或任何其他 ORM 的功能。

您必须删除 EF 设计器中的继承,只允许表之间的正常 1:1* 关联。

您最终会得到您正在寻找的数据库设计,您的 C# 语法将如下所示:

Client c;

c.Customer.[...]
c.Supplier.[...]

关于database - Entity Framework : Multiple Inheritance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3549229/

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