基本SQL /实体框架1到0..1实体模型问题

时间:2009-03-26 14:31:39

标签: sql-server entity-framework

在我的数据库中,我有2个表A和B

A具有列ID,标题和B_ID。 B_ID允许空值。 B有列ID和SomeText 两者中的ID都是主键标识 A在B_ID

上也有唯一索引

这似乎是说A可以有0或1 B行与之关联的基本方式,而且每个B都与1 A相关联。到目前为止这是否正确?

当我创建该数据库的ADO.NET Entity Framework实体模型时,A具有B的导航属性,其具有多重性0..1。这是有道理的。

实体B具有A的导航属性,但其上的多重性为*(多个)。

我想我的数据库定义不会让一个B与许多A相关联,所以也许这不是问题,但有没有办法定义数据库和/或修改实体模型以便从B导航属性到A的多重性为1?

3 个答案:

答案 0 :(得分:1)

我不完全了解您的实体设置,但如果B的主键包含ID值和任何其他字段,或者根本没有主键关系,那么关系是正确的,因为实体框架会显示它。您可以仔细检查您的架构,以确保所有内容都按您认为的那样进行配置。

要从B到A具有1的多重性,您需要在B中具有主键,该主键仅是在A中用作外键的ID值。

如果我对您的实体布局的解释不正确,请澄清您的问题,我会尽力帮助您。

答案 1 :(得分:0)

感谢mwigdahl,答案实际上是在数据库定义中。

我更改了表定义。 表A具有列ID,B_ID和标题 表B有列A_ID和SomeText

ID是表A的主键 A_ID是表B的主键 表A中的B_ID是表B中列A_ID的外键引用

当我从该db定义创建实体框架模型时,我得到A和B之间预期的1到0..1关系。

答案 2 :(得分:0)

听起来你应该在A的表中省略B的ID(它与A的id相同吗?)你在做这样的事吗?

CREATE TABLE dbo.People(PersonId int NOT NULL, Name varchar(50) NOT NULL)
CREATE TABLE dbo.BioData(PersonId int NOT NULL, ExtraInfo varchar(255) NOT NULL)