繁体   English   中英

如何在实体框架中建立真正的一对一关系?

[英]How to do a true one-to-one relationship in Entity Framework?

我快到了。 我越接近是 1 到 0..1 的关系。

我的物理模式是:

User: 
 - Id : int primary Key identity
 - Name : varchar(50)

UserDetail: 
 - Id : int primary Key | foreign key to User.Id
 - DisplayName : varchar(200)

当我在实体数据 Model 设计器中导入此架构时,Visual Studio 2010 建议使用 1 到 0..1 的关系。 如果我强制执行 1..1 它接受但结果看起来不像 1..1 关系。

我对 1..1 关系有什么期望?

我希望它:

  • 创建 UserDetail 时自动创建用户,反之亦然(首选)
  • 当我尝试保存没有 UserDetail 的用户时抛出异常,反之亦然

我怎样才能做到这一点?

即使在数据库级别也不支持它,因为真正的 1 对 1 关系意味着您必须具有从UserUserDetail的 FK 以及同时从UserDetailUser的 FK。 1 比 1 表示如果没有第二条记录,一条记录就不能存在,但是当检查引用约束时,无法将这些记录插入表中。

一对一实际上始终是 1 到 0..1,因为您必须能够在没有依赖记录的情况下插入主体记录,并且一旦主体记录被持久化,您就可以插入依赖记录。 EF 与关系数据库的工作方式密切相关。 我知道纯 1 对 1 工作的唯一情况是表拆分,您将 map 到同一个表的实体,因此两个实体必须始终存在并插入在一起,因为它们形成单个记录。

如果您想始终将UserUserDetail保存在一起,您应该 model 使用实体拆分将它们作为单个实体。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM