【问题标题】:Entity Framework EDMX Invalid Multiplicity?实体框架 EDMX 多重性无效?
【发布时间】: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


【解决方案1】:

对于任何寻找答案的人来说,正确的设置是使 entity_detail 对象上的外键 (entityID) 列也成为主键

这样它将是唯一的,但仅在存在时才需要 (0..1)

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多