|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我之所以想学。NET,是因为一直觉的BILLGATES好厉害,希望有一天能去微软,虽然现在还距离遥远,呵呵:)从单相思(单向一对一),到两情相悦(双向一对一)并步进婚姻殿堂,接上去就是生儿育女,汉子晋级为父亲,假如生了良多孩子,那父亲与孩子之间的干系就是“一对多”。
一个父亲有多个孩子,一个孩子只属于一个父亲。
我们仍是以博客为例,场景以下:
一个博客(BlogSite)有多篇文章(BlogPost),一篇文章只属于一个博客。
看类图:
看表布局:
BlogSite与BlogPost的界说代码:
- publicclassBlogSite{publicintBlogID{get;set;}publicstringBlogApp{get;set;}publicboolIsActive{get;set;}publicGuidUserID{get;set;}publicvirtualBlogUserBlogUser{get;set;}publicvirtualICollection<BlogPost>BlogPosts{get;set;}}
复制代码
- publicclassBlogPost{publicintID{get;set;}publicstringTitle{get;set;}publicintBlogID{get;set;}publicBlogSiteBlogSite{get;set;}}
复制代码
上面是关头一步,在EntityFramework的OnModelCreating中经由过程FluentAPI界说“一对多”干系:
- modelBuilder.Entity<BlogSite>().HasMany(b=>b.BlogPosts).WithRequired(p=>p.BlogSite);
复制代码 代码复杂直不雅,一个博客HasMany文章,一篇文章Require一个博客。
上面我们经由过程三个查询场景考证一下。
第一个场景:进进一个博客(BlogSite),并浏览博客中的一切文章(BlogPost)。
LINQ查询代码:
- publicBlogSiteGetBlogSite(intblogId){return_blogSiteReposiotry.Entities.Include(b=>b.BlogPosts).FirstOrDefault(b=>b.BlogID==blogId);}
复制代码 测试代码:
- [TestMethod]publicvoidGetBlogSite_Test(){varblogSite=_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看似庞大,实践上SQLServer会在实行时举行优化,看实行企图就晓得了。
测试切合请求,经由过程!
第二个场景:浏览一篇文章(BlogPost),并要晓得来自哪一个博客(BlogSite)
LINQ查询代码:
- publicBlogPostGetBlogPost(intblogPostId){return_blogPostRepository.Entities.Include(p=>p.BlogSite).FirstOrDefault(p=>p.ID==blogPostId);}
复制代码 测试代码:
- [TestMethod]publicvoidGetBlogPost_Test(){varp=_aggBlogSiteService.GetBlogPost(1);Assert.IsNotNull(p);Console.WriteLine("BlogPostTitle:"+p.Title+","+"BlogApp:"+p.BlogSite.BlogApp);}
复制代码
测试了局:
实践实行的SQL:
测试经由过程!
第三个场景:看良多文章(BlogPost),并要晓得每篇文章分离来自哪一个博客(BlogSite)
LINQ查询代码:
- publicIEnumerable<BlogPost>GetAllBlogPosts(){return_blogPostRepository.Entities.Include(p=>p.BlogSite);}
复制代码 测试代码:
- [TestMethod]publicvoidGetBlogPosts_Test(){_aggBlogSiteService.GetAllBlogPosts().ToList().ForEach(p=>Console.WriteLine("BlogPostTitle:"+p.Title+","+"BlogApp:"+p.BlogSite.BlogApp));}
复制代码
测试了局:
实践实行的SQL:
轻松过关!
小结
HasMany+WithRequired,“一对多”干系简单了解,完成复杂,走的弯路也起码。
只需两情相悦了,统统都变得复杂,而最难的就是怎样从“单相思”到“两情相悦”。
net网页编程欺骗了我们那么多年,如今的多核时代,我认为它气数已尽! |
|