我快到了。我得到的越近是 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)
当我在实体数据模型设计器中导入此架构时,Visual Studio 2010 建议 1 到 0..1 的关系。如果我强制执行 1..1,它会接受,但结果看起来不像 1..1 关系。
我对 1..1 关系有什么期望?
我希望它:
- 在我创建 UserDetail 时自动创建一个 User,反之亦然(首选)
- 当我尝试保存没有 UserDetail 的用户时抛出异常,反之亦然
我怎样才能做到这一点?
最佳答案
它甚至在数据库级别也不被支持,因为真正的 1 对 1 关系意味着您必须具有从 User
到 UserDetail
的 FK,同时从 UserDetail
到 User
。 1 到 1 表示没有第二条记录就不能存在一条记录,但这使得在检查引用约束时无法将这些记录插入到表中。
一对一实际上总是 1 到 0..1,因为您必须能够在没有从属记录的情况下插入主体记录,并且一旦主体记录被持久化,您就可以插入从属记录。 EF 与关系数据库的工作方式密切相关。我知道纯 1 对 1 有效的唯一情况是 table splitting您将实体映射到同一个表的位置,因此两个实体必须始终存在并一起插入,因为它们形成单个记录。
如果您希望始终将User
和UserDetail
保存在一起,您应该使用Entity splitting 将它们建模为单个实体。 .
关于.net - 如何在 Entity Framework 中实现真正的一对一关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6242985/