問題:
創(chuàng)新互聯(lián)是一家專注于網(wǎng)站制作、成都網(wǎng)站制作與策劃設(shè)計(jì),文峰網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:文峰等地區(qū)。文峰做網(wǎng)站價(jià)格咨詢:18982081108有2個(gè)或更多的表共享相同的主鍵,現(xiàn)在需要使用單個(gè)實(shí)體映射這些表。
解決方案:
數(shù)據(jù)庫圖表:
使用代碼優(yōu)先的方式建模。
1、添加ADO.NET實(shí)體數(shù)據(jù)模型,命名模型為EF6CodeFirstRecipesContext,選擇空代碼優(yōu)先模型。
2、將生成的EF6CodeFirstRecipesContext類修改為EF6RecipesContext類。
3、修改app.config中的連接字符串參數(shù)。
4、添加POCO實(shí)體類Product。代碼如下:
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; public class Product { [Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public int SKU { get; set; } public string Description { get; set; } public decimal Price { get; set; } public string ImageURL { get; set; } }
5、在EF6RecipesContext類中添加如下屬性:
public DbSetProducts { get; set; }
6、在重寫的OnModelCreating方法中添加如下代碼:
modelBuilder.Entity() .Map(m => { m.Properties(p => new { p.SKU, p.Description, p.Price }); m.ToTable("Product", "Chapter2"); }) .Map(m => { m.Properties(p => new { p.SKU, p.ImageURL }); m.ToTable("ProductWebInfo", "Chapter2"); });
具體過程可參見上一節(jié)內(nèi)容。如果需要直接使用上一節(jié)內(nèi)容,目前我們還沒有使用Migration指令,則需要手動(dòng)將_Migration表刪除。
原理:
從另外的表中獲取當(dāng)前表每一行的額外的信息這種情況在舊系統(tǒng)中很常見。特別是當(dāng)數(shù)據(jù)庫擴(kuò)展時(shí),沒有人喜歡在一些核心表中添加額外的列。這時(shí)候就可以通過另外的表來嫁接額外的信息。
通過整合2個(gè)或多個(gè)表為單個(gè)實(shí)體類,更通俗的講,將單個(gè)實(shí)體類拆分成2個(gè)或多個(gè)表,這個(gè)過程通常稱為垂直拆分(vertical splitting)。
垂直拆分的弊端是,每次我們需要獲取實(shí)體類的實(shí)例時(shí),都需要使用join連接用于從其他表中獲取信息。
using (var context = new EF6RecipesContext()) { var product = new Product { SKU = 147, Description = "Expandable Hydration Pack", Price = 19.97M, ImageURL = "/pack147.jpg" }; context.Products.Add(product); product = new Product { SKU = 178, Description = "Rugged Ranger Duffel Bag", Price = 39.97M, ImageURL = "/pack178.jpg" }; context.Products.Add(product); product = new Product { SKU = 186, Description = "Range Field Pack", Price = 98.97M, ImageURL = "/nop_w_picpath.jpg" }; context.Products.Add(product); product = new Product { SKU = 202, Description = "Small Deployment Back Pack", Price = 29.97M, ImageURL = "/pack202.jpg" }; context.Products.Add(product); context.SaveChanges(); } using (var context = new EF6RecipesContext()) { foreach (var p in context.Products) { Console.WriteLine("{0} {1} {2} {3}", p.SKU, p.Description, p.Price.ToString("C"), p.ImageURL); } }
執(zhí)行結(jié)果如下:
另外有需要云服務(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)用場景需求。