仓酷云

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

[学习教程] ASP.NET网页设计水落石出:为何Entity Framework不克不及举行跨数据库查询(附办理办法)仓酷云 ...

[复制链接]
跳转到指定楼层
楼主
发表于 2015-1-18 11:20:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
既然话题已经抄起,我打算今晚发篇博文再引导一下舆论方向,使它再火两天,抛砖引玉,而且赵劼先生一直在跟帖,使.NET阵营的我感到万分难得。在上篇漫笔中,我们发明EntityFramework在构建SQL语句时,将ToTable("CNBlogsTex.dbo.blog_PostBody")中的"CNBlogsTex.dbo.blog_PostBody"转换为"[CNBlogsText.dbo].[blog_PostBody]",从而形成不克不及举行跨数据库查询。
明天上午,我们经由过程Reflector对EntityFramework的代码举行剖析,找出了原形。
原形以下:
1.关于“CNBlogsTex.dbo.blog_PostBody"字符串,EntityFramework对其举行了拆分,拆分为:Schema称号(CNBlogsTex.dbo)与数据库表称号(blog_PostBod)。
这部分是在System.Data.Entity.ModelConfiguration.Utilities.ObjectExtensions的ParseQualifiedTableName()办法中处置的,Reflector出来的代码以下:
  1. publicstaticvoidParseQualifiedTableName(stringqualifiedName,outstringschemaName,outstringtableName){qualifiedName=qualifiedName.Trim();intlength=qualifiedName.LastIndexOf(.);schemaName=null;tableName=qualifiedName;switch(length){case-1:break;case0:throwError.ToTable_InvalidSchemaName(qualifiedName);default:if(length==(tableName.Length-1)){throwError.ToTable_InvalidTableName(qualifiedName);}schemaName=qualifiedName.Substring(0,length);tableName=qualifiedName.Substring(length+1);break;}if(string.IsNullOrWhiteSpace(schemaName)){schemaName=null;}}
复制代码
2.方括号的增加(CNBlogsTex.dbo变成[CNBlogsTex.dbo],blog_PostBod变成[blog_PostBod])是在System.Data.SqlClient.SqlDdlBuilder的AppendIdentifier(stringidentifier)办法中处置的,Reflector出来的代码以下:
  1. privatevoidAppendIdentifier(stringidentifier){this.AppendSql("["+identifier.Replace("]","]]")+"]");}
复制代码
以是,当我们当表名改成"CNBlogsText].[dbo.blog_PostBody"时,"CNBlogsText].[dbo"就被转换为"[CNBlogsText]].[dbo]"。
不但有代码有原形,并且有图有原形:

晓得了原形,今朝只能看原形心叹,能不克不及办理这个成绩仍是未知数...
更新:
killkill的一句复兴让“心叹”酿成了“镇静”,那种程序员独有的,常人享用不到的镇静...
本来要棍骗的不是EntityFramework,并且是SQLServer,用SQLServer的同义词(SYNONYM)能够轻松弄定这个成绩,创立同义词的SQL语句以下:
  1. CREATESYNONYM[dbo].[CNBlogsText__blog_PostBody]FOR[CNBlogsText].[dbo].[blog_PostBody]
复制代码
十分感激killkill的匡助!我也不知道,我原来理解的,NET就是C++编程,只是与net网页编程相对,呵呵。以为.ET就是高级C++编程。
柔情似水 该用户已被删除
沙发
发表于 2015-1-20 20:50:35 | 只看该作者
使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
活着的死人 该用户已被删除
板凳
发表于 2015-1-29 23:43:20 | 只看该作者
目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.
若相依 该用户已被删除
地板
发表于 2015-2-2 18:02:36 | 只看该作者
CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。
海妖 该用户已被删除
5#
发表于 2015-2-8 03:36:01 | 只看该作者
那么,ASP.Net有哪些改进呢?
变相怪杰 该用户已被删除
6#
发表于 2015-2-24 03:36:10 | 只看该作者
有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。
再现理想 该用户已被删除
7#
发表于 2015-3-5 19:36:19 | 只看该作者
逐步缩小出错代码段的范围,最终确定错误代码的位置。
爱飞 该用户已被删除
8#
发表于 2015-3-11 10:19:39 | 只看该作者
asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源
山那边是海 该用户已被删除
9#
发表于 2015-3-18 04:47:09 | 只看该作者
对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。
飘飘悠悠 该用户已被删除
10#
发表于 2015-3-25 12:06:07 | 只看该作者
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 04:07

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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