仓酷云

标题: ASP.NET编程:Entity Framework 理论系列 ―― 弄好干系 - 生儿育女(一对多,one-to-many)仓酷云 ... [打印本页]

作者: 兰色精灵    时间: 2015-1-18 11:16
标题: ASP.NET编程:Entity Framework 理论系列 ―― 弄好干系 - 生儿育女(一对多,one-to-many)仓酷云 ...
我之所以想学。NET,是因为一直觉的BILLGATES好厉害,希望有一天能去微软,虽然现在还距离遥远,呵呵:)从单相思(单向一对一),到两情相悦(双向一对一)并步进婚姻殿堂,接上去就是生儿育女,汉子晋级为父亲,假如生了良多孩子,那父亲与孩子之间的干系就是“一对多”。
一个父亲有多个孩子,一个孩子只属于一个父亲。
我们仍是以博客为例,场景以下:
一个博客(BlogSite)有多篇文章(BlogPost),一篇文章只属于一个博客。
看类图:
ASP.NET编程:Entity Framework 理论系列 ―― 弄好干系 - 生儿育女(一对多,one-to-many)仓酷云 ...
登录/注册后可看大图

看表布局:
ASP.NET编程:Entity Framework 理论系列 ―― 弄好干系 - 生儿育女(一对多,one-to-many)仓酷云 ...
登录/注册后可看大图

BlogSite与BlogPost的界说代码:

ASP.NET编程:Entity Framework 理论系列 ―― 弄好干系 - 生儿育女(一对多,one-to-many)仓酷云 ...
登录/注册后可看大图
  1. publicclassBlogSite{publicintBlogID{get;set;}publicstringBlogApp{get;set;}publicboolIsActive{get;set;}publicGuidUserID{get;set;}publicvirtualBlogUserBlogUser{get;set;}publicvirtualICollection<BlogPost>BlogPosts{get;set;}}
复制代码



  1. publicclassBlogPost{publicintID{get;set;}publicstringTitle{get;set;}publicintBlogID{get;set;}publicBlogSiteBlogSite{get;set;}}
复制代码


上面是关头一步,在EntityFramework的OnModelCreating中经由过程FluentAPI界说“一对多”干系:
  1. modelBuilder.Entity<BlogSite>().HasMany(b=>b.BlogPosts).WithRequired(p=>p.BlogSite);
复制代码
代码复杂直不雅,一个博客HasMany文章,一篇文章Require一个博客。
上面我们经由过程三个查询场景考证一下。
第一个场景:进进一个博客(BlogSite),并浏览博客中的一切文章(BlogPost)。
LINQ查询代码:
  1. publicBlogSiteGetBlogSite(intblogId){return_blogSiteReposiotry.Entities.Include(b=>b.BlogPosts).FirstOrDefault(b=>b.BlogID==blogId);}
复制代码
测试代码:

  1. [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));}
复制代码


测试了局:
ASP.NET编程:Entity Framework 理论系列 ―― 弄好干系 - 生儿育女(一对多,one-to-many)仓酷云 ...
登录/注册后可看大图

实践实行的SQL:
ASP.NET编程:Entity Framework 理论系列 ―― 弄好干系 - 生儿育女(一对多,one-to-many)仓酷云 ...
登录/注册后可看大图

这段SQL看似庞大,实践上SQLServer会在实行时举行优化,看实行企图就晓得了。
测试切合请求,经由过程!
第二个场景:浏览一篇文章(BlogPost),并要晓得来自哪一个博客(BlogSite)
LINQ查询代码:
  1. publicBlogPostGetBlogPost(intblogPostId){return_blogPostRepository.Entities.Include(p=>p.BlogSite).FirstOrDefault(p=>p.ID==blogPostId);}
复制代码
测试代码:

  1. [TestMethod]publicvoidGetBlogPost_Test(){varp=_aggBlogSiteService.GetBlogPost(1);Assert.IsNotNull(p);Console.WriteLine("BlogPostTitle:"+p.Title+","+"BlogApp:"+p.BlogSite.BlogApp);}
复制代码


测试了局:
ASP.NET编程:Entity Framework 理论系列 ―― 弄好干系 - 生儿育女(一对多,one-to-many)仓酷云 ...
登录/注册后可看大图

实践实行的SQL:
ASP.NET编程:Entity Framework 理论系列 ―― 弄好干系 - 生儿育女(一对多,one-to-many)仓酷云 ...
登录/注册后可看大图

测试经由过程!
第三个场景:看良多文章(BlogPost),并要晓得每篇文章分离来自哪一个博客(BlogSite)
LINQ查询代码:
  1. publicIEnumerable<BlogPost>GetAllBlogPosts(){return_blogPostRepository.Entities.Include(p=>p.BlogSite);}
复制代码
测试代码:

  1. [TestMethod]publicvoidGetBlogPosts_Test(){_aggBlogSiteService.GetAllBlogPosts().ToList().ForEach(p=>Console.WriteLine("BlogPostTitle:"+p.Title+","+"BlogApp:"+p.BlogSite.BlogApp));}
复制代码


测试了局:
ASP.NET编程:Entity Framework 理论系列 ―― 弄好干系 - 生儿育女(一对多,one-to-many)仓酷云 ...
登录/注册后可看大图

实践实行的SQL:
ASP.NET编程:Entity Framework 理论系列 ―― 弄好干系 - 生儿育女(一对多,one-to-many)仓酷云 ...
登录/注册后可看大图

轻松过关!
小结
HasMany+WithRequired,“一对多”干系简单了解,完成复杂,走的弯路也起码。
只需两情相悦了,统统都变得复杂,而最难的就是怎样从“单相思”到“两情相悦”。
net网页编程欺骗了我们那么多年,如今的多核时代,我认为它气数已尽!
作者: 变相怪杰    时间: 2015-1-18 16:47
我的意思是.net好用,从功能上来说比JAVA强还是很明显的。
作者: 小妖女    时间: 2015-1-22 13:10
但是目前在CGI中使用的最为广泛的是Perl语言。所以,狭义上所指的CGI程序一般都是指Perl程序,一般CGI程序的后缀都是.pl或者.cgi。
作者: admin    时间: 2015-1-23 11:51
ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。
作者: 若相依    时间: 2015-1-25 10:05
有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。
作者: 金色的骷髅    时间: 2015-1-27 05:07
业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
作者: 精灵巫婆    时间: 2015-2-2 12:42
ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。
作者: 若天明    时间: 2015-2-7 19:35
在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗?
作者: 小女巫    时间: 2015-2-23 08:22
这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。
作者: 老尸    时间: 2015-2-27 22:59
ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。
作者: 蒙在股里    时间: 2015-3-9 15:05
这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。
作者: 愤怒的大鸟    时间: 2015-3-23 07:32
目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2