<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

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

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

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

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

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

      雖然不能使用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í)體類的屬性就是子彈,每顆子彈只能攻擊唯一對應(yīng)的目標(biāo),在射擊過程中,只要有一顆子彈攻擊的目標(biāo)不存在,機(jī)槍就會(huì)卡殼(子彈決定目標(biāo)?)。也就是Entity Framework會(huì)在IDataReader中查找每個(gè)實(shí)體類屬性對應(yīng)的值,而我們的應(yī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é)果給對應(yīng)的實(shí)體類屬性賦值。難道這個(gè)新式武器也有設(shè)計(jì)缺陷,沒有考慮到這樣的應(yīng)用場景?還是我們不會(huì)使用?

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

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

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

      SqlCommand command = (SqlCommand)_sqldb.GetStoredProcCommand("[blog_Entry_Get]");
      command.Parameters.AddWithValue(
      "@BlogID", blogId);
      command.Parameters.AddWithValue(
      "@EntryID", entryId);
      using (IDataReader reader = _sqldb.ExecuteReader(command))
      {
      if (reader.Read())
      {
      BlogEntry entry
      = AutoMapper.Mapper.DynamicMap<BlogEntry>(reader);
      }
      }

      posted @ 2011-03-28 11:08  dudu  閱讀(23114)  評論(48)    收藏  舉報(bào)
      主站蜘蛛池模板: 久久国内精品自在自线91| 热久久这里只有精品国产| 国产综合色在线精品| 国产一区二区三区小说| 国产av丝袜熟女一二三| 国产午夜福利免费入口| 亚洲色成人网站www永久| 国产高颜值不卡一区二区| 久久精品国产99国产精品澳门| 无码帝国www无码专区色综合| 久久中精品中文字幕入口| 自拍视频亚洲精品在线| 开心色怡人综合网站| 成人亚欧欧美激情在线观看| 亚洲国产午夜理论片不卡| 337p粉嫩大胆色噜噜噜| 国产不卡一区不卡二区| 元码人妻精品一区二区三区9| 亚洲中文字幕乱码电影| 亚洲色最新高清AV网站| 国产精品日韩中文字幕熟女| 999福利激情视频| 亚洲精品男男一区二区| 免费看的日韩精品黄色片| 她也色tayese在线视频| 国产日女人视频在线观看| 人人妻人人狠人人爽天天综合网| 国产喷水1区2区3区咪咪爱av| 厦门市| 国产精品第二页在线播放| 无码激情亚洲一区| 国产一区二区不卡自拍| av中文字幕国产精品| 国产成人一区二区三区在线| 97久久人人超碰国产精品| 国产一区二区爽爽爽视频| 2019国产精品青青草原| 在线播放深夜精品三级| 亚洲乱码精品久久久久..| 国产网友愉拍精品视频| 国产精品不卡区一区二|