天天看点

数据库关系与EF实体关系

ADO.NET Entity Framework是对SQL Server 表和表间关系的一个映射的框架,在SQL Server中的表关系,在EF中也转抽象成实体类间的关系。在SQL Server中,表间关系有:一对多,一对一,多对多,在实体中,也同样有这几种关系,并且在EF中,能从数据表关系生成实体间关系。

1、 一对多

下图是数据中表Sub与表Main的关系图,表Sub中的MainID对应表Main中的ID。

<a target="_blank" href="http://blog.51cto.com/attachment/201104/143631408.png"></a>

对应的EF中的实体图为

<a target="_blank" href="http://blog.51cto.com/attachment/201104/143643332.png"></a>

在Main对象中有一个Subs的集合,但对于Sub对象,则有一个Main的属性,但只是一个这样的对象。不管是在数据库还是在EF中,一对多的关系是比较好理解,也没有太多歧义的。

2、 一对一

我们可以把上面的数据表改成一对一,如果不改变表结构的基础上可以给Subs表中的MainID加一个唯一约束,如下:

SQL语句:

alter table subs

add constraint AK_SubsMainid

Unique(MainID)

这时,我们打开数据库关系图,会发现,确定表Mains与Subs成了一对一的关系,如下图:

<a target="_blank" href="http://blog.51cto.com/attachment/201104/143705122.png"></a>

此时,我们再从数据库生成实体关系类,如下图:

<a target="_blank" href="http://blog.51cto.com/attachment/201104/143804806.png"></a>

结果还是一对多的实体图,Main 对象的Subs属性仍然是个集合,但这个集合往数据理新时,要验证唯一约束。

要使这种一对一的数据表关系映射到实体的一对一,就得改变一下表结构了。

现在Mains表中的ID是自动增长,也是该表的主键,而Subs中的ID也是该表的主键,但他是Mains表ID的外键。这时,生成的实体关系图如下:

<a target="_blank" href="http://blog.51cto.com/attachment/201104/143832712.png"></a>

3、 多对多

如果两张表是多对多的关系,就需要再建立第三张表,只是用来存两张表的ID,如下图:

<a target="_blank" href="http://blog.51cto.com/attachment/201104/143844841.png"></a>

生成实体图如下:

<a target="_blank" href="http://blog.51cto.com/attachment/201104/143858748.png"></a>

生成实体关系图后,就后了两个实体了,其中的关系,代表着一张数据库表MainSub。

本文转自桂素伟51CTO博客,原文链接: http://blog.51cto.com/axzxs/552433,如需转载请自行联系原作者