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

And*_*ena 2 .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)
Run Code Online (Sandbox Code Playgroud)

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

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

我希望它能:

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

我怎么能做到这一点?

Lad*_*nka 6

因为真正的1对1的关系意味着你必须有FK它甚至不是在数据库级别上的支持User,以UserDetail在同一时间从FK UserDetailUser.1到1表示没有第二条记录就不能存在一条记录,但是当检查引用约束时,不可能将这些记录插入表中.

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

如果要始终保存UserUserDetail一起使用,则应使用实体拆分将它们建模为单个实体.