【发布时间】:2018-11-10 00:14:04
【问题描述】:
我似乎在设计中遇到了数据库优先多重性问题。 我正在使用 EF v5.0
我有两个具有以下属性的数据库实体(例如伪类):
entity {
long Id; //PK
bool myProp;
}
entity_detail {
long entityID; //FK to entity.Id
string name;
datetime entered;
}
当我从数据库更新模型时,它会在 .tt 中正确生成这些类,但是,它会将 entity_detail 放入 ICollection<entity_detail> 类中的 entity 中。
这是由于多重性,当我在 EDMX 中将多重性从 Many (*) 更改为 Zero or One (0..1) 时,它会出错并强制我使用 Many (*)
这种情况的问题是entity_detail应该仅在myProp设置为false时生成(以避免数据库中的冗余数据)
因此是 0..1,关于如何从数据库角度进行设置以使 EDMX 在实体端将其更新为 0..1 并在 entity_detail 端更新为 1 的任何想法?
提前致谢!
【问题讨论】:
-
0..1 关系将涉及实体内部的可为空的实体详细信息 ID。
-
@StevePy 如果依赖项不需要 entity_detail 实体,为什么还需要它?例如,在 codefirst 中,您可以执行 modelBuilder.Entity
().HasOptional(e => e.entity_detail).WithRequired(e => e.entity); -
是的,这应该会在父实体中产生一个可为空的子 ID 和关联的导航属性。可以为空的 FK 意味着这个父级要么有 1 个孩子,要么有 0 个孩子。一个集合是 HasMany().WithRequired() 并且 EF 允许 0 个或多个孩子。 (任何将其限制为 0..1 的尝试都必须在代码中完成。)由子级控制的 DB FK 形成 1-many,没有办法限制没有两个子级可以引用同一个父级。
标签: c# entity-framework multiplicity