繁体   English   中英

在EF CF中建模有向图

[英]Modelling a directed graph in EF CF

我在使用EF Code First建模图形结构时遇到了一些麻烦。 我遇到这样的情况,我的应用程序中的许多具体对象可以是与许多类型的边相关的节点。

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

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

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

我已经到了使用TPT继承的地步,所以我有了一个GraphNode表,其中的PK是GraphNodeID,但随后将它用作具体类型的每个表的PK,在自己的PK的位置,这会引起问题。

有没有人这样做过,或者有人可以为我指出正确的方向呢?

如您所知,继承不适用于这种情况。

其他的ORM,例如NHibernate,为“异构关联”提供了开箱即用的支持。 由于EF不支持,因此我的解决方案是在“服务”层(即在控制器/视图模型与DbContext之间)进行处理。

我要做的是创建一个抽象,使我可以存储和检索与任何实体关联的元素(在我的情况下为Notes或Comments)。 我通过手动存储所引用对象的实体类型和ID来做到这一点。

除了要将元素与尚未持久的实体关联(我在DbContext中使用一些回调来处理)外,这通常很简单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM