【发布时间】:2014-06-17 11:05:44
【问题描述】:
我有一个关于如何在 Microsoft SQL-Server 2012 中实现 Table 关系的问题。
我有一个应该包含父/子结构的表 (MyTable)。 一位父母可能有一个孩子,一位孩子只有一位父母。这是经典的一对一关系。最上面的条目显然可能没有父项。 (这是通过可空属性建模的)
当我尝试在 MS-SQL 中对此进行建模时,我收到一个如下表。
这是我的代码:
CREATE TABLE [dbo].[MyTable](
[Id] [uniqueidentifier] PRIMARY KEY NOT NULL,
[Name] [nvarchar](200) NOT NULL,
[ParentObjectId] [uniqueidentifier] NULL
)
GO
ALTER TABLE [dbo].[MyTable] WITH CHECK ADD CONSTRAINT [FK_MyTable_ParentObject] FOREIGN KEY([ParentObjectId])
REFERENCES [dbo].[MyTable] ([Id])
GO
ALTER TABLE [dbo].[MyTable] WITH CHECK ADD CONSTRAINT [Unique_ParentId] UNIQUE(ParentObjectId)
GO
ALTER TABLE [dbo].[MyTable] CHECK CONSTRAINT [FK_MyTable_ParentObject]
GO
UNIQE 约束应确保一个孩子最多有一个父母。
但是实体框架不允许我将属性更改为一对一的关系。它总是生成一对多的关系。
编辑: 代码是 DB-First。
您对如何在 MS-SQL 和 EntityFramework 中正确建模有任何想法吗?
【问题讨论】:
-
你能告诉你 EF 定义/实体吗?
-
根据定义,您是指生成的代码,还是 VisualStudio 中包含属性(.edmx-File)的可视化表示?
-
哦 - DB-first。我假设代码优先。抱歉,DB-first 帮不上忙 - 我对 *.edmx 文件过敏...
-
呵呵,好的。无论如何,谢谢你的时间.. :)
-
这是真的,但是在代码中选择 .Child 而不是 .Childs.FirstOrDefault() 并检查其值是否为 null 会更方便,...如果没有办法,我会像这样做。 :) --> 在 Tanner 建议在代码中处理这个并且不需要 EF 映射它之后输入。 (评论被删除了?)
标签: c# sql sql-server entity-framework linq-to-sql