新聞中心
問題:
創(chuàng)新互聯(lián)建站致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營銷,包括成都做網(wǎng)站、成都網(wǎng)站建設(shè)、SEO優(yōu)化、網(wǎng)絡(luò)推廣、整站優(yōu)化營銷策劃推廣、電子商務(wù)、移動互聯(lián)網(wǎng)營銷等。創(chuàng)新互聯(lián)建站為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制及解決方案,創(chuàng)新互聯(lián)建站核心團(tuán)隊(duì)十載專注互聯(lián)網(wǎng)開發(fā),積累了豐富的網(wǎng)站經(jīng)驗(yàn),為廣大企業(yè)客戶提供一站式企業(yè)網(wǎng)站建設(shè)服務(wù),在網(wǎng)站建設(shè)行業(yè)內(nèi)樹立了良好口碑。
在實(shí)體類型上生成一個(gè)永久性的過濾,使其能夠映射為表中記錄的子集。
解決方案:
有一張保存賬號信息的表,如下圖所示。這個(gè)表有一個(gè)DeletedOn的可空列,用于保存賬號被刪除的日期和時(shí)間。如果賬號仍然是激活的,這個(gè)列為空。我們想我們的Account集合僅僅表示激活的賬號,也就是這個(gè)賬號沒有DeletedOn值。
數(shù)據(jù)庫腳本如下:
create table [Chapter2].[Account] ( AccountID int primary key identity(1,1), DeletedOn datetime null, AccountHolderID int not null )
為了建模這張表,使其僅有激活賬號填充Account實(shí)體集合,完成下面的步驟:
1、添加一個(gè)新的EDM模型。
2、選擇來自數(shù)據(jù)庫的EF設(shè)計(jì)器。
3、選擇數(shù)據(jù)連接。
4、在數(shù)據(jù)庫對象和設(shè)置對話框中,選擇Account表,并保持默認(rèn)設(shè)置。點(diǎn)擊“完成”。點(diǎn)擊“EF設(shè)計(jì)器”,選擇屬性,設(shè)置“實(shí)體容器名”為“EF6Recipes9Context”;并修改名稱空間。
5、在EF設(shè)計(jì)器中,右擊Account實(shí)體,選擇“表映射”,打開“映射細(xì)節(jié)”窗口。點(diǎn)擊“添加條件”,選擇DeletedOn列;在操作列,選擇“是”;在值/屬性列,選擇“Null”。這樣就產(chǎn)生了一個(gè)映射條件:當(dāng)DeletedOn為空時(shí)。
6、在EF設(shè)計(jì)器中,選中Account實(shí)體的DeletedOn屬性,右擊,選擇“刪除”。由于我們正在條件映射中使用DeletedOn列,所以它不能被映射到實(shí)體的一個(gè)屬性。在我們的模型中DeletedOn始終為Null。
原理:
當(dāng)我們想在一個(gè)實(shí)體上應(yīng)用永久性過濾時(shí),我們常常使用條件映射。條件映射也是實(shí)現(xiàn)TPH繼承的關(guān)鍵??蓱?yīng)用的條件有:
using (var context = new EF6Recipes9Context()) { context.Database.ExecuteSqlCommand(@"insert into chapter2.account(DeletedOn,AccountHolderId) values('2/10/2009',1728)"); var account = new Account { AccountHolderID = 2320 }; context.Accounts.Add(account); account = new Account { AccountHolderID = 2502 }; context.Accounts.Add(account); account = new Account { AccountHolderID = 2603 }; context.Accounts.Add(account); context.SaveChanges(); } using (var context = new EF6Recipes9Context()) { foreach (var account in context.Accounts) { Console.WriteLine("Account Id = {0}", account.AccountHolderID); } }
上面的代碼中,我們首先使用Context的Database屬性的ExecuteSqlCommand方法向數(shù)據(jù)庫中插入一條記錄。主要是因?yàn)槲覀冃枰迦胍粭lDeletedOn列為非空值的情況。在我們的模型中沒有這樣的屬性映射的這個(gè)列。事實(shí)上,Account實(shí)體類型從不實(shí)例化一個(gè)DeletedOn為非空的實(shí)例。
上面的結(jié)果并不包含我們最先插入的DeletedOn為非空的記錄。
標(biāo)題名稱:EF6秘籍2th:實(shí)體數(shù)據(jù)建?;A(chǔ)(十二)使用條件過濾對象集合
URL網(wǎng)址:http://fisionsoft.com.cn/article/jjsgcs.html