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

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

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

      Entity Framework 4.1 and Poco 使用存儲過程聯表查詢

      一:數據庫支持

      為了演示本例,我們創建了另外一個簡單的示例數據庫MiniNW,該數據庫來自于ADO.NET Entity Framework Extensions,但在本例中,我們不會使用這個針對EF的擴展框架,因為它對POCO的支持不好,同時它也不支持DbContext,簡單的說來就是它目前不支持EF4.1。

      MiniNW可以在本示例代碼的如下位置獲得:

      image

      數據庫對應關系如下(由于數據庫相對簡單,所以直接列出數據,從數據可以直觀看出兩表的關系):

      image

      二:生成POCO及DbContext

      我們使用Entity Framework Power Tools CTP生成POCO及相關映射,如果你對此不熟悉,可參考本篇《使用Entity Framework和WCF Ria Services開發SilverLight之3:Map》。

      三:主表從表數據一起關聯查詢

      數據庫中存在存儲過程GetCategory:

      ALTER proc [dbo].[GetCategory]
          @cid int
      as
      begin
          select *
          from Categories
          where @cid = cid
      end

      執行此存儲過程的代碼如下:

              public IEnumerable<Category> GetCategoryWithProductsWithID(int id)
              {
                  var parameter = new SqlParameter
                  {
                      DbType = DbType.Int32,
                      ParameterName = "cid",
                      Value = id
                  };
                  //聯表并延遲加載
                  var result = (from p in this.Categories.SqlQuery("EXECUTE GetCategory @cid", parameter) select p).ToList();
                  return result;
              }

      得到的數據如下:

      image

      其中,Category所對應Products是延遲加載進來的,如果我們只使用Category,數據引擎就不會查詢Products表的數據,但是,只要我們一到Category中查看Products,就會獲取如上圖這樣的Products數據。請根據源碼中的兩個數據實體理解。

      執行存儲部分的代碼EF為我們生成如下:

      exec sp_executesql N'EXECUTE GetCategory @cid',N'@cid int',@cid=1

      延遲加載部分的代碼EF為我們生成如下:

      exec sp_executesql N'SELECT 
      [Extent1].[pid] AS [pid], 
      [Extent1].[name] AS [name], 
      [Extent1].[discontinued_date] AS [discontinued_date], 
      [Extent1].[cid] AS [cid]
      FROM [dbo].[Products] AS [Extent1]
      WHERE [Extent1].[cid] = @EntityKeyValue1',N'@EntityKeyValue1 int',@EntityKeyValue1=1

      三:僅獲取主表數據

      如果不需要關聯表的數據,我們可以像下面這樣編碼。以下這段代碼使用的是和上文一樣的存儲過程:

              public IEnumerable<Category> GetCategoryWithID(int id)
              {
                  var parameter = new SqlParameter
                  {
                      DbType = DbType.Int32,
                      ParameterName = "cid",
                      Value = id
                  };
                  //非聯表
                  var result = (from p in this.Categories.SqlQuery("EXECUTE GetCategory @cid", parameter)
                                select new
                                {
                                    cid = p.cid,
                                    name = p.name
                                }).ToList()
                               .Select(r => new Category()
                               {
                                   cid = r.cid,
                                   name = r.name
                               });
                  return result;
              }

      如果你對這段代碼表示不很理解,請參看此文《使用Entity Framework和WCF Ria Services開發SilverLight之6:查找指定字段》。

      獲取數據如下:

      image

      四:由從表關聯主表數據

      從表關聯主表的存儲過程如下:

      ALTER proc [dbo].[GetProductAndCategory]
          @pid int
      as
      begin
          select p.pid, p.[name] , p.discontinued_date, c.cid, c.[name] 
          from Products as p join Categories as c on p.cid = c.cid
          where p.pid = @pid    
      end

      注意,原始例子所帶的存儲過程不是這樣的,多了這樣的語句:

      image

      DbContext默認支持實體類型的字段和數據庫視圖是一個字段名,所以我們去掉了重命名部分。

      實現此功能的代碼如下:

              public IEnumerable<Product> GetProductAndCategoryWithID(int id)
              {
                  var parameter = new SqlParameter
                  {
                      DbType = DbType.Int32,
                      ParameterName = "pid",
                      Value = id
                  };
                  //延遲加載
                  var result = (from p in this.Products.SqlQuery("EXECUTE dbo.GetProductAndCategory @pid", parameter) select p).ToList();
                  return result;
              }

      要注意,主表的數據也是延遲加載的,只有使用到的時候才會被查詢。

      EF為我們生成的代碼如下:

      exec sp_executesql N'EXECUTE dbo.GetProductAndCategory @pid',N'@pid int',@pid=1

      獲取的數據如下:

      image

      源碼下載:SLOperation20110703.zip

      posted @ 2011-07-04 09:02  陸敏技  閱讀(12089)  評論(4)    收藏  舉報
      Web Counter
      Coupon for Contacts
      主站蜘蛛池模板: 亚洲伊人久久精品影院| 精品免费看国产一区二区| 夜爽8888视频在线观看| 国产亚洲999精品AA片在线爽| 民县| 色欲狠狠躁天天躁无码中文字幕| 亚洲av永久一区二区| 国产蜜臀av在线一区在线| 国产精品va无码一区二区| 成人欧美日韩一区二区三区| 99精品热在线在线观看视 | 中文字幕无码av波多野吉衣| 国产短视频精品一区二区| 东京热一精品无码av| 新昌县| 精品无码久久久久国产电影| 极品无码国模国产在线观看| 人妻少妇偷人无码视频| 中文字幕国产精品av| 97久久超碰精品视觉盛宴| 国产福利永久在线视频无毒不卡| 国产成人午夜福利在线播放 | 早起邻居人妻奶罩太松av| 亚洲精品日韩在线丰满| 草草浮力地址线路①屁屁影院| 四虎成人精品无码永久在线| 男人进女人下部全黄大色视频| 亚洲精品韩国一区二区| 亚洲一区二区三区久久受| 日本亚洲一区二区精品久久| 成人无码影片精品久久久| 国产欧美一区二区精品久久久| 婷婷六月色| 99视频30精品视频在线观看| 当雄县| 五月天中文字幕mv在线| 精品国产色情一区二区三区| 太谷县| 国产a在视频线精品视频下载 | 人妻少妇精品视频专区| 亚洲国产精品久久久天堂麻豆宅男|