【发布时间】:2013-12-20 13:12:30
【问题描述】:
出于某种原因,我在 EF 6 项目上下定了决心,我会尽量避免命名外键。我在没有增量测试的情况下定义了大部分模型,因此我遇到了多重和不完整的 Fluent API 定义问题:
“User_InternalAuth”关联集中的关系位于 “已删除”状态。给定多重约束,对应的 “User_InternalAuth_Target”也必须处于“已删除”状态。
在一种情况下,代码如下:
nModelBuilder.Entity<User>()
.HasOptional<InternalAuth>(u => u.InternalAuth)
.WithRequired(a => a.User)
.WillCascadeOnDelete(true);
我的理解是它在说:
- 实体
User - 具有
InternalAuth类型的可选属性InternalAuth - 在另一端,
InternalAuth有一个必需的属性User,因此 所有InternalAuths 有Users 但Users 可能有也可能没有`内部验证。 - 如果
User被删除,他的InternalAuth也会被删除(如果他有一个)(这是否会覆盖将可选项视为可空对象的可选行为?)
但是,当我尝试删除 User 时,我收到关于 InternalAuth 和 User 之间某些关联多重性的异常。
如果 EF 了解关系的多重性,是否有办法为其提供唯一的列名,从而有规范的命名约定?
如果是这样,您是否真的需要通过注释模型或通过 Fluent API 显式定义外键?
如果不是,我应该继续努力避免它是否值得或可取? (我正在考虑迁移数据模型、数据库管理、任何 EF 怪癖)
为什么尝试删除上述关系会违反多重性约束?它还需要知道什么?
【问题讨论】:
标签: c# entity-framework foreign-keys fluent fluent-interface