偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

博客園現(xiàn)代化建設(shè)——AutoMapper

數(shù)據(jù)庫
上篇隨筆寫的是我們?cè)谛掳娌┛秃笈_(tái)開發(fā)中用上了新式武器——Entity Framework,該武器火力猛,威力大,但使用中發(fā)現(xiàn)在某些場(chǎng)景下顯得不夠靈活,后來不得不引進(jìn)輕量級(jí)常規(guī)武器——AutoMapper。

上篇隨筆寫的是我們?cè)谛掳娌┛秃笈_(tái)開發(fā)中用上了新式武器——Entity Framework,該武器火力猛,威力大,但使用中發(fā)現(xiàn)在某些場(chǎng)景下顯得不夠靈活,后來不得不引進(jìn)輕量級(jí)常規(guī)武器——AutoMapper。

我們遇到的場(chǎng)景是一個(gè)復(fù)雜的實(shí)體類,有很多屬性,數(shù)據(jù)庫操作是一個(gè)跨數(shù)據(jù)庫查詢,查詢的字段遠(yuǎn)遠(yuǎn)少于實(shí)體類的屬性。

對(duì)于跨數(shù)據(jù)庫查詢,我們沒有找到通過LINQ to Entities實(shí)現(xiàn)的方法,于是就用DbSet.SqlQuery調(diào)用存儲(chǔ)過程進(jìn)行查詢,代碼如下:

  1. using (BlogDbContext context = new BlogDbContext())  
  2. {  
  3.     string sql = string.Format("EXEC [blog_Entry_Get] @BlogID={0},@EntryID={1}", blogId, entryId);  
  4.     BlogEntry entry = context.BlogEntries.SqlQuery(sql).Single();  
  5. }  

雖然不能使用LINQ進(jìn)行查詢,但我們不想在這里拋棄這個(gè)新式武器,不能發(fā)射導(dǎo)彈,可以用一下機(jī)關(guān)槍嘛。于是,如上面的代碼所示,用SqlQuery進(jìn)行查詢,用Entity Framework完成查詢結(jié)果與實(shí)體類的數(shù)據(jù)映射。

結(jié)果發(fā)現(xiàn),Entity Framework是依賴于實(shí)體類的屬性進(jìn)行映射的。如果把Entity Framework比作機(jī)關(guān)槍,那實(shí)體類的屬性就是子彈,每顆子彈只能攻擊唯一對(duì)應(yīng)的目標(biāo),在射擊過程中,只要有一顆子彈攻擊的目標(biāo)不存在,機(jī)槍就會(huì)卡殼(子彈決定目標(biāo)?)。也就是Entity Framework會(huì)在IDataReader中查找每個(gè)實(shí)體類屬性對(duì)應(yīng)的值,而我們的應(yīng)用場(chǎng)景卻是“查詢的字段遠(yuǎn)遠(yuǎn)少于實(shí)體類的屬性”,這時(shí),Entity Framework成為了一堆廢鐵(這個(gè)說法不妥,可以通過modelBuilder.Entity<BlogEntry>().Ignor忽略不需要映射的字段,但是,如果不同的查詢返回的字段不同,這個(gè)方法就不管用了)。

為什么不由目標(biāo)決定子彈?出現(xiàn)什么目標(biāo),用什么子彈,既節(jié)省子彈,又不會(huì)卡殼。也就是根據(jù)查詢結(jié)果給對(duì)應(yīng)的實(shí)體類屬性賦值。難道這個(gè)新式武器也有設(shè)計(jì)缺陷,沒有考慮到這樣的應(yīng)用場(chǎng)景?還是我們不會(huì)使用?

翻來覆去地?cái)[弄它,還是沒搞定,只能換武器...

數(shù)據(jù)庫查詢換成了舊式武器Enterprise Library,并引進(jìn)了新的輕量級(jí)常規(guī)武器AutoMapper進(jìn)行查詢結(jié)果與實(shí)體類的映射(而且是開源的)。

“輕量級(jí)”果然名不虛轉(zhuǎn),簡(jiǎn)單易用,針對(duì)性強(qiáng),我們用它輕松解決了問題,代碼如下:

  1. SqlCommand command = (SqlCommand)_sqldb.GetStoredProcCommand("[blog_Entry_Get]");  
  2. command.Parameters.AddWithValue("@BlogID", blogId);  
  3. command.Parameters.AddWithValue("@EntryID", entryId);  
  4. using (IDataReader reader = _sqldb.ExecuteReader(command))  
  5. {  
  6.     if (reader.Read())  
  7.     {  
  8.         BlogEntry entry = AutoMapper.Mapper.DynamicMap<BlogEntry>(reader);  
  9.     }  
  10. }  

原文鏈接:http://www.cnblogs.com/dudu/archive/2011/03/28/entity_framework_automapper.html

【編輯推薦】

  1. 博客園現(xiàn)代化建設(shè)——Entity Framework
責(zé)任編輯:艾婧 來源: 博客園
相關(guān)推薦

2011-03-30 13:14:05

Entity Fram

2018-02-01 16:34:54

2019-09-23 17:34:05

存儲(chǔ)

2022-07-11 05:34:19

云原生應(yīng)用程序

2015-10-29 14:35:21

移動(dòng)設(shè)備現(xiàn)代化

2020-06-05 14:16:05

醫(yī)藥

2020-05-08 14:47:53

網(wǎng)絡(luò)現(xiàn)代化網(wǎng)絡(luò)IT

2013-03-19 18:04:06

51CTO

2021-04-13 16:13:38

大數(shù)據(jù)教育科學(xué)

2021-07-09 05:25:48

CIO遺留系統(tǒng)現(xiàn)代化用戶體驗(yàn)

2025-02-13 00:42:58

2015-09-15 11:06:33

第一屆稅務(wù)行業(yè)信息化研華為

2024-12-02 09:26:17

2022-11-01 07:14:32

裸金屬云云服務(wù)云原生

2023-06-25 09:04:12

數(shù)字企業(yè)架構(gòu)EA

2023-02-08 11:07:56

數(shù)字時(shí)代數(shù)字運(yùn)營(yíng)模式

2023-05-03 21:47:22

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)