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

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

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

      Entity Framework 實踐系列 —— 搞好關系 - 生兒育女(一對多,one-to-many)

      單相思(單向一對一),到兩情相悅(雙向一對一)并步入婚姻殿堂,接下來就是生兒育女,男人升級為父親,如果生了很多孩子,那父親與孩子之間的關系就是“一對多”。

      一個父親有多個孩子,一個孩子只屬于一個父親。

      我們還是以博客為例,場景如下:

      一個博客(BlogSite)有多篇文章(BlogPost),一篇文章只屬于一個博客。

      看類圖:

      看表結構:

      BlogSite與BlogPost的定義代碼:

      public class BlogSite
      {
      public int BlogID { get; set; }
      public string BlogApp { get; set; }
      public bool IsActive { get; set; }
      public Guid UserID { get; set; }
      public virtual BlogUser BlogUser { get; set; }
      public virtual ICollection<BlogPost> BlogPosts { get; set; }
      }

      public class BlogPost
      {
      public int ID { get; set; }
      public string Title { get; set; }
      public int BlogID { get; set; }
      public BlogSite BlogSite { get; set; }
      }

      下面是關鍵一步,在Entity Framework的OnModelCreating中通過Fluent API定義“一對多”關系:

      modelBuilder.Entity<BlogSite>()
      .HasMany(b
      => b.BlogPosts)
      .WithRequired(p
      => p.BlogSite);

      代碼簡單直觀,一個博客HasMany文章,一篇文章Require一個博客。

      下面我們通過三個查詢場景驗證一下。

      第一個場景:進入一個博客(BlogSite),并閱讀博客中的所有文章(BlogPost)。

      LINQ查詢代碼:

      public BlogSite GetBlogSite(int blogId)
      {
      return _blogSiteReposiotry.Entities
      .Include(b
      => b.BlogPosts)
      .FirstOrDefault(b
      => b.BlogID == blogId);
      }

      測試代碼:

      [TestMethod]
      public void GetBlogSite_Test()
      {
      var blogSite
      = _aggBlogSiteService.GetBlogSite(1);
      Assert.IsNotNull(blogSite);
      Console.WriteLine(
      "BlogApp:" + blogSite.BlogApp);
      Console.WriteLine(
      "BlogPosts:");
      blogSite.BlogPosts.ToList().ForEach
      (
      p
      => Console.WriteLine(p.Title + "-" + p.BlogSite.BlogApp)
      );
      }

      測試結果:

      實際執行的SQL:

      這段SQL看似復雜,實際上SQL Server會在執行時進行優化,看執行計劃就知道了。

      測試符合要求,通過!

      第二個場景:閱讀一篇文章(BlogPost),并要知道來自哪個博客(BlogSite)

      LINQ查詢代碼:

      public BlogPost GetBlogPost(int blogPostId)
      {
      return _blogPostRepository.Entities
      .Include(p
      => p.BlogSite)
      .FirstOrDefault(p
      => p.ID == blogPostId);
      }

      測試代碼:

      [TestMethod]
      public void GetBlogPost_Test()
      {
      var p
      = _aggBlogSiteService.GetBlogPost(1);
      Assert.IsNotNull(p);
      Console.WriteLine(
      "BlogPost Title:" + p.Title + ", " +
      "BlogApp:" + p.BlogSite.BlogApp);
      }

      測試結果:

      實際執行的SQL:

      測試通過!

      第三個場景:看很多文章(BlogPost),并要知道每篇文章分別來自哪個博客(BlogSite)

      LINQ查詢代碼:

      public IEnumerable<BlogPost> GetAllBlogPosts()
      {
      return _blogPostRepository.Entities
      .Include(p
      => p.BlogSite);
      }

      測試代碼:

      [TestMethod]
      public void GetBlogPosts_Test()
      {
      _aggBlogSiteService.GetAllBlogPosts().ToList()
      .ForEach(
      p
      => Console.WriteLine("BlogPost Title:" + p.Title + ", " +
      "BlogApp:" + p.BlogSite.BlogApp)
      );
      }

      測試結果:

      實際執行的SQL:

      輕松過關!

      小結

      HasMany + WithRequired,“一對多”關系容易理解,實現簡單,走的彎路也最少。

      只要兩情相悅了,一切都變得簡單,而最難的就是如何從“單相思”到“兩情相悅”。

      HasMany
      
      posted @ 2011-07-09 11:39  dudu  閱讀(16313)  評論(26)    收藏  舉報
      主站蜘蛛池模板: 四虎永久播放地址免费| 欧美激情综合色综合啪啪五月| 大伊香蕉在线精品视频75| 99热这里只有精品免费播放| 日本高清视频网站www| 一面膜上边一面膜下边视频| 国产日产亚洲系列av| 精品国产亚洲一区二区三区| 亚洲av午夜成人片| 无码人妻精品一区二区在线视频 | 国产乱老熟女乱老熟女视频| 国产一区二区丰满熟女人妻| 国产福利深夜在线观看| 精品无码一区在线观看| 精品视频在线观看免费观看| 国产精品老熟女免费视频| 国产AV福利第一精品| 同仁县| 熟女国产精品一区二区三| 日本福利一区二区精品| 在线天堂中文www官网| 口爆少妇在线视频免费观看| 最新的精品亚洲一区二区| 被灌满精子的少妇视频| 精品国产中文字幕av| 国产一区二区三区我不卡| 国产成人精品无码免费看| 女人爽到高潮的免费视频| 狠狠色噜噜狠狠狠777米奇小说| 精品精品亚洲高清a毛片| 强d乱码中文字幕熟女1000部| 国产午精品午夜福利757视频播放| 性动态图无遮挡试看30秒| 国产精品有码在线观看| 国产成a人片在线观看视频下载| 亚洲精品一区久久久久一品av| 亚洲中文字幕亚洲中文精| 亚洲精品无码av人在线观看| 国产小嫩模无套中出视频| 久久99精品久久久久久9| 国产精品免费视频不卡|