問題:
10年積累的網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先做網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有望奎免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。在數(shù)據(jù)庫的鏈接表中除了原有的外鍵列之外,還有其他的數(shù)據(jù)列?,F(xiàn)在想把鏈接表及其關(guān)聯(lián)表導(dǎo)入到EDM中,以形成一個(gè)多對多關(guān)系或2個(gè)一對多關(guān)系。
解決方案:
EF不支持帶有屬性的關(guān)聯(lián)。如果鏈接表包含有除了外鍵之外的其他列,EF將產(chǎn)生一個(gè)單獨(dú)的實(shí)體類型以表示這個(gè)鏈接表。最終的模型將包含一個(gè)鏈接表實(shí)體類型和2個(gè)一對多的關(guān)聯(lián)。
數(shù)據(jù)庫圖表如下:
數(shù)據(jù)庫腳本如下:
use [EF6Recipes] go create table Chapter2.Item( SKU int primary key, [Description] varchar(50) not null, Price decimal(18,2) not null); create table Chapter2.[Order]( OrderId int identity primary key, OrderDate datetime not null); create table Chapter2.OrderItem( OrderId int foreign key references Chapter2.[Order](OrderId), SKU int foreign key references Chapter2.Item(SKU), [Count] int not null, constraint PK_OrderItem primary key (OrderId,SKU));
一個(gè)訂單(Order)能有多個(gè)項(xiàng)(Item),一個(gè)項(xiàng)也能包含在多個(gè)訂單里。另外,還有一個(gè)Count屬性關(guān)聯(lián)到每個(gè)訂單與項(xiàng)的實(shí)例。這個(gè)Count屬性就被稱為負(fù)載(Payload)。
操作步驟同EF6 秘籍 2th:實(shí)體數(shù)據(jù)建模基礎(chǔ) (五)從現(xiàn)有數(shù)據(jù)庫生成模型一致,不再重復(fù)。
生成的EDM如下圖:
原理:
EF不支持帶有其他屬性列的關(guān)聯(lián)。它將轉(zhuǎn)換這個(gè)鏈接表為一個(gè)包含2個(gè)一對多關(guān)聯(lián)的實(shí)體。在這種情況下,OrderItem表沒有被轉(zhuǎn)換成一個(gè)關(guān)聯(lián),而是轉(zhuǎn)換為一個(gè)1對多關(guān)聯(lián)到Order和一個(gè)1對多關(guān)聯(lián)到Item的實(shí)體類型。
額外屬性列的增加需要關(guān)聯(lián)表的實(shí)體提供一個(gè)額外的跳板以獲取相關(guān)的項(xiàng)。
using (var context = new EF6RecipesContext()) { var oiList = new List<OrderItem>(); var order1 = new Order { OrderDate = new DateTime(2010, 1, 18) }; var order2 = new Order { OrderDate = new DateTime(2010, 1, 19) }; var item1 = new Item { SKU = 1729, Description = "Backpack", Price = 29.97M }; var item2 = new Item { SKU = 2929, Description = "Water Filter", Price = 13.97M }; var item3 = new Item { SKU = 1847, Description = "Camp Stove", Price = 43.99M }; oiList.Add(new OrderItem { Order = order1, Item = item1, Count = 1 }); oiList.Add(new OrderItem { Order = order1, Item = item2, Count = 3 }); oiList.Add(new OrderItem { Order = order1, Item = item3, Count = 1 }); oiList.Add(new OrderItem { Order = order2, Item = item1, Count = 2 }); oiList.Add(new OrderItem { Order = order2, Item = item2, Count = 2 }); oiList.Add(new OrderItem { Order = order2, Item = item3, Count = 2 }); context.OrderItems.AddRange(oiList); context.SaveChanges(); } using (var context = new EF6RecipesContext()) { foreach (var order in context.Orders) { Console.WriteLine("Order # {0}, orderd on {1}", order.OrderId, order.OrderDate.ToShortDateString()); Console.WriteLine("SKU\tDescription\tQty\tPrice"); Console.WriteLine("---\t-----------\t---\t-----"); foreach (var oi in order.OrderItems) { Console.WriteLine("{0}\t{1}\t{2}\t{3}", oi.SKU, oi.Item.Description, oi.Count, oi.Item.Price); } } }
運(yùn)行結(jié)果如下:
該代碼與原文提供的程序不一樣,原文提供的代碼我執(zhí)行的時(shí)候只插入了Order的數(shù)據(jù),附原文代碼:
var order = new Order { OrderId = 1, OrderDate = new DateTime(2010, 1, 18) }; var item = new Item { SKU = 1729, Description = "Backpack", Price = 29.97M }; var oi = new OrderItem { Order = order, Item = item, Count = 1 }; item = new Item { SKU = 2929, Description = "Water Filter", Price = 13.97M }; oi = new OrderItem { Order = order, Item = item, Count = 3 }; item = new Item { SKU = 1847, Description = "Camp Stove", Price = 43.99M }; oi = new OrderItem { Order = order, Item = item, Count = 1 }; context.Orders.Add(order); context.SaveChanges();
最佳實(shí)踐:
由于鏈接表有負(fù)載和沒有負(fù)載,生成的模型完全不同。這就需要我們在設(shè)計(jì)之初就需要分析鏈接表會不會有其他列的可能,如果不能確定,使用一個(gè)自增列。這樣的話就會生成一個(gè)包含2個(gè)1對多關(guān)系的實(shí)體類型。在以后進(jìn)行其他屬性列擴(kuò)展時(shí),對模型的影響最小。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
文章名稱:EF6秘籍2th:實(shí)體數(shù)據(jù)建模基礎(chǔ)(七)建模有標(biāo)量屬性的多對多關(guān)系-創(chuàng)新互聯(lián)
分享鏈接:http://muchs.cn/article4/dgcgie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、靜態(tài)網(wǎng)站、網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、移動網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)