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,如需轉載請自行聯系原作者