仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1296|回复: 11
打印 上一主题 下一主题

[学习教程] ASP.NET编程:Entity Framework 理论系列 ―― 弄好干系 - 生儿育女(一对多,one-to-many)仓酷云 ...

[复制链接]
兰色精灵 该用户已被删除
跳转到指定楼层
#
发表于 2015-1-18 11:16:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我之所以想学。NET,是因为一直觉的BILLGATES好厉害,希望有一天能去微软,虽然现在还距离遥远,呵呵:)从单相思(单向一对一),到两情相悦(双向一对一)并步进婚姻殿堂,接上去就是生儿育女,汉子晋级为父亲,假如生了良多孩子,那父亲与孩子之间的干系就是“一对多”。
一个父亲有多个孩子,一个孩子只属于一个父亲。
我们仍是以博客为例,场景以下:
一个博客(BlogSite)有多篇文章(BlogPost),一篇文章只属于一个博客。
看类图:

看表布局:

BlogSite与BlogPost的界说代码:

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


测试了局:

实践实行的SQL:

这段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);}
复制代码


测试了局:

实践实行的SQL:

测试经由过程!
第三个场景:看良多文章(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));}
复制代码


测试了局:

实践实行的SQL:

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

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 02:42

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表