这次我有一个简单的问题:
我有一张表,与他自己相关
=====================
| Id |
| IdParent |
| NodeName |
=====================
Where IdParent可以有 0 个或多个Id。
问题是,我如何使用 Fluent Api 或数据注释来配置这种关系。
这种关系的结果是一棵树(有两个级别),如下所示:
a
|---b
|---c
d
e
f---g
其中 (a,d,e,f) 是父节点,(b,c,g) 是子节点。
非常感谢您的帮助。
实体框架支持自引用外键。不清楚你是数据库优先者,还是代码优先者。
如果您是数据库第一人,只需在数据库中创建一个自引用外键,然后从数据库更新模型。 EF 至少从 EF 4 开始就支持这种类型的键。
从代码优先的角度来看,这可能有点棘手。如果您使用 EF 4.x,则需要覆盖OnModelCreating
函数(参见例子在这里)。如果您使用的是 EF 5(来自 .net 4.5 beta 或 2011 年 6 月 CTP),那么这个问题提供了一些很好的指导。它的缺点是使用[ForeignKey("IdParent")]
模型上的属性。
不管怎样,你应该看到 XML 类似......
<edmx:Runtime>
<edmx:StorageModels>
<Schema Namespace="...">
<AssociationSet Name="FK_Culture_has_ParentCulture"
Association="AL_Model.Store.FK_Culture_has_ParentCulture">
<End Role="Culture" EntitySet="Culture" />
<End Role="Culture1" EntitySet="Culture" />
</AssociationSet>
.....
.....
<edmx:ConceptualModels>
<Schema Namespace="...">
<EntityContainer Name="..." >
<Association Name="FK_Culture_has_ParentCulture">
<End Role="Culture" Type="AL_Model.Store.Culture" Multiplicity="0..1" />
<End Role="Culture1" Type="AL_Model.Store.Culture" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="Culture">
<PropertyRef Name="CultureID" />
</Principal>
<Dependent Role="Culture1">
<PropertyRef Name="ParentCultureID" />
</Dependent>
</ReferentialConstraint>
</Association>
自引用结构
这个声明值得引起一些关注:
Where IdParent Could Have 0 or many Id.
为了拥有“零或父 ID”,您需要在表中包含一个包含零作为 ID 的条目。为什么?因为外键需要链接到某物。然而,我怀疑你想要的是使 IdParent 可为空。您的问题没有指定数据库,但大多数主要数据库仅在存在值时才强制执行外键。换句话说,IdParent 中的 Null 意味着没有父级。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)