一对一自关系和实体框架(Entity Framework)

3
我希望有一个实体可以有一个子级(一个或零个)。这个子级与父级相同。我不确定如何设置实体框架,因为我希望每个实体都有两个导航属性。一个用于导航到子级,另一个用于导航到父级。基本上它与双向链表的结构完全相同。
我认为这个表结构应该足够了:
 int | id       | PK
 int | id_next  | FK
text | data

但是我该如何为下一个/上一个项目创建导航属性?我只能为下一个项目创建导航属性。

感谢您的帮助。

3个回答

2
你做不到。这里的问题在于一对一关系有一个非常特定的要求 - 外键值必须在整个表中是唯一的。一旦唯一性没有得到强制执行,您就可以添加第二个实体指向相同的父实体,这样就形成了一对多的关系。
为了在像您在示例中描述的自引用关系中强制执行此操作,您需要在 "id_next" 上放置一个唯一索引,在 SQL Server 中它将起作用。但问题是,实体框架不支持唯一键。因此,实体框架只能在两种不同的实体类型之间构建一对一关系,其中从属实体类型中的 FK 也是其 PK(强制 FK 成为唯一的唯一方法)= 两个实体具有相同的 PK 值。这在自引用关系中无法使用,因为您不能在一个表中拥有两个相同的 PK 值。

2
您可以在EF4中通过在实体上指定0..1 -> 0..1关系来实现此操作。将其中一个导航属性命名为“Previous”,另一个命名为“Next”。这将在底层数据库上创建一个隐藏字段。
我没有彻底测试过这种方法,但在创建数据库脚本时似乎有效。

0

研究实体框架中的树形结构。基本上,您想要一个垂直树(即一个分支)。框架不会强制只有一个分支,但您可以在业务逻辑中管理它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接