gpt4 book ai didi

c# - 在 EF CF 中建模有向图

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

我在使用 EF Code First 对图结构建模时遇到了一些问题。我有一种情况,我的应用程序中的许多具体对象可以是与多种类型的边缘中的任何一种相关的节点。

例如,两个用户对象可能有关系(喜欢、不喜欢、相关),但每个对象都可能与另一种类型的对象(“已查看”页面、“喜欢”消息等)有同等关系

为了在应用程序中对此进行建模,我使用了 GraphNode 的基类,所有可能的节点都将继承自该基类,并且每个 GraphNode 都有一组边。每条边都有一个 SourceNode、一个 DestinationNode 和一个 RelationshipType(用于加权)。

我知道如何将其建模为直接的数据库优先开发,Edge 的表将具有代理键、SourceObjectID 和 DestinationObjectID 字段,它们将是来自被链接对象的 PK、SourceObjectType 和 DestinationObjectType 字段,它们是相关对象的类型,但站点需要 EF Code First 实现。

我已经到了使用 TPT 继承的地步,所以我有一个带有 PK 的 GraphNode 表,即 GraphNodeID,但它随后将其用作每个表的 PK类型,代替它们自己的 PK,这会导致问题。

有没有人这样做过,或者任何人都可以指出正确的方向以找到这样做的方法吗?

最佳答案

如您所知,继承不太适合这种情况。

其他 ORM,如 NHibernate,为“异构关联”提供开箱即用的支持。由于 EF 没有,我的解决方案是在“服务”层(即在 Controller / View 模型和 DbContext 之间)处理此问题。

我所做的是创建一个抽象,让我可以存储和检索与任何实体关联的元素(在我的例子中是注释或评论)。我通过手动存储引用对象的实体类型和 ID 来做到这一点。

这主要是微不足道的,除非您想将元素与非持久实体相关联(我在我的 DbContext 中使用一些回调来处理它)

关于c# - 在 EF CF 中建模有向图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10935861/

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