日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
博客園現(xiàn)代化建設——AutoMapper

上篇隨筆寫的是我們在新版博客后臺開發(fā)中用上了新式武器——Entity Framework,該武器火力猛,威力大,但使用中發(fā)現(xiàn)在某些場景下顯得不夠靈活,后來不得不引進輕量級常規(guī)武器——AutoMapper。

成都創(chuàng)新互聯(lián)公司專注于察雅企業(yè)網站建設,成都響應式網站建設公司,成都做商城網站。察雅網站建設公司,為察雅等地區(qū)提供建站服務。全流程按需搭建網站,專業(yè)設計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務

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

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

 
 
 
  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進行查詢,但我們不想在這里拋棄這個新式武器,不能發(fā)射導彈,可以用一下機關槍嘛。于是,如上面的代碼所示,用SqlQuery進行查詢,用Entity Framework完成查詢結果與實體類的數(shù)據(jù)映射。

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

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

翻來覆去地擺弄它,還是沒搞定,只能換武器...

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

“輕量級”果然名不虛轉,簡單易用,針對性強,我們用它輕松解決了問題,代碼如下:

 
 
 
  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(reader);  
  9.     }  
  10. }  

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


分享名稱:博客園現(xiàn)代化建設——AutoMapper
鏈接URL:http://www.5511xx.com/article/dhciipe.html