如何在Entity Framework中建立真正的一对一关系?

时间:2011-06-05 12:47:14

标签: .net entity-framework-4

我快到了。我越接近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)

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

我对1..1关系的期望是什么?

我希望它能够:

  • 创建UserDetail时自动创建用户,反之亦然(最好)
  • 当我尝试在没有UserDetail的情况下保存用户时反而抛出异常,反之亦然

我该如何实现?

1 个答案:

答案 0 :(得分:6)

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

一对一实际上总是1到0..1,因为您必须能够插入主要记录而不依赖于主记录,并且一旦主记录被持久化,您就可以插入从属记录。 EF与关系数据库的工作方式密切相关。我知道纯粹的1对1工作的唯一情况是table splitting,其中您将实体映射到同一个表,因此两个实体必须始终存在并插入在一起,因为它们形成单个记录。

如果您希望始终将UserUser保存在一起,则应使用Entity splitting将其建模为单个实体。