wcf存储过程
① 电子商务网站一般架构有哪些
大型电子商务网站架构,摘抄 7.同一个网站的多语言该如何处理是好,使用配置文件然后cookie或url来判别?===客户是自己公司,使用标准方法即可
8.电子商务网站最多的就是 商品的打折方式和积分的赠送了,这里要怎么设计才好(工厂模式)?===采购成熟的规则引擎
9.如果同一时间并发大量订单的话,如果确保一个订单的有效提交呢?
==电子商务一般要使用MQ,推荐IBM MQ;使用MSMQ也可
第一点是数据库要设计好,要达到什么级别,你可能需要考虑哪些表需要拆分,哪些表的核心数据需要冗余,如果是mysql,还要考虑其他的问题,比如存储引擎。
新闻肯定是要生成纯静态页,对数据库压力就小很多,不过静态页也有管理上的不方便,更新删除添加都要对磁盘文件进行操作
做一个自定义缓存层,对缓存逻辑进行控制,可以采用第三方缓存模块,如果使用.net来做,可以层层缓存,页面缓存,数据缓存(memcache,不过在win下效率不高)
电子商务网站特点就是对事务的严格,需要数据库设计的时候要求高性能,也需要合适的索引,支持高并发,经常对产品表用户表等进行索引检查,是否有很多索引扫描和表扫描(即使是局部的,也要将“局部”控制到最小范围)
mssql语句对不需要事务的查询要附带上with(nolock),以利于并发更新。
有些功能模块不能按照想当然的方式开发,比如产品访问次数,切不可将这些更新非常频繁的字段置于核心表内,明确的做法是将其剥离开来 还有就是切不可经常性将字段设计成bool类型,这样会给以后的扩展留出路,即使是男女这种字段,也建议采用tiny类型
其他还有就是在产品设计的时候充分考虑seo,网站目录结构清晰可读,而不是带着一串串的查询参数。
对安全要有整体的把握,最好全都是用存储过程,在项目上线前将数据库存储过程全部导出再查找貌似exec的语句,查找是否需要替换成sp_executesql。
另外,如果采用mssql,全文搜索直接用mssql fte就可以,速度和精确度都还是可以的,最重要的是维护和管理开发很简单。
打折的处理可以按照电信的一次,二次批价功能,如果你做过电信方面的系统。
当然也可以设计得更简单的一些。 静态的页面建议使用CDN加速,以解决网通和电信之间访问速度的问题;
数据的缓存方面建议考虑用memcache,另外也可以分别在表现层和数据层利用.net中的现存缓存机制作业可;
简单执行的sql可以不用存储过程,存储过程会占用数据库服务器的处理时间,造成死锁;
mvc建议还是做些CMS的项目上应用,电子商城不是很适合,个人观点。url上可以做转义,使url显示更友好;
数据库建议建立分布数据库,这样可以转移查询和大访问量对数据库带来压力;
图片可以考虑单独放在一台服务器上;1.三层架构
2.使用手写sql,手写entity(生成也可),缓存反射绑定(不是缓存数据哦,缓存映射关系),要考虑网站的长期发展还是手写吧 灵活 性能也好
3.没有这种问题,商业驱动的,纯购物就好了,千万别搞什么圈子,wiki
4.纯.net的mvc不建议,webform不搞viewstate,不搞服务端控件(除repeater)再加点mvc的思想已足够用了
5.不需要缓存数据(除搜索产品部分),要考虑多台服务器的程序快速部署,config文件会很多,config要序列化缓存
6.当然是先生成好了,参照jd吧,按业务每张图片对应几个不同大小的图
7.据经验,电子商务网站仅靠中英双语来达到多语言是不靠谱的(文化 用户习惯不是简单的语言切换),如果想真正运营英语的就要重新开发一个版本
8.不搞模式
9.负载均衡(web,db)+ssb异步处理数据
10.你是业务类型的日志还是异常日志? 前台订单流程上异常日志不需要了,找个工具录个脚本不停的跑 保证随时发现问题发邮件就可以了
11.找第三方搜索组件 类似endeca的
12.负载均衡挺简单的,初期靠软件就可以,一切图片找第三方放cdn,前台网站用到ajax的地方很少,如果用的话jquery 1,一个电子商务网站用户99.5%的行为时Find
2、对于商品检索部分,能不用数据库就不用数据库(网上切词等相关的开源平台很多)
3、分布式缓存(Memcached 、Volecity),个人测试volecity 3还是不错的
4、系统设计时必须要考虑可运营。从这个角度去设计系统
5、对于电子商务网站改动很频繁,必须考虑架构设计如何适应频繁的版本更新
6、必须设计一个好的单点登录系统。
7、建议能不用sqlserver就不用它。
8、对于大型电子商务网站来说,系统的I/O是起决定因素而不是CPU和内存。1.项目划分是否会有问题,图中分别是 实体层,数据访问接口层,数据访问层,业务逻辑接口层,业务逻辑,网站A,B,C
项目划分其实不重要,重要的的是你在写代码的时候是否能把代码合理的分到对应的项目里。
2.数据访问层是要开发效率(NBear,Linq,Nh等),还是访问效率(直接使用sql等)?是否可以先使用开发效率高的,等日后访问量大了,再重写并替换数据访问层?
开发效率优先,访问量大了以后,我相信是有钱投到硬件上的,在你程序写的不是很烂的情况下,升级硬件远比优化程序节省成本。
3.网站被切割成了多个子网站,有一些控件(如header,footer)是要共享的,如何跨网站项目共享这些控件呢?
那就做成自定义控件啦。
4.ms的mvc 1.0也出来不少时间了,是否已经够成熟运用到项目中?或者是网站后台使用webform的,前台使用mvc?
推荐使用使用webform的,前台使用mvc,对于前台来说使用mvc能更好的提升性能,更方便的更换页面表现形式。后台界面相对稳定,用webform可以提高开发效率。
5.网站数据的缓存是自己开发一个hashtable什么的来维护呢,还是使用Memcached ?
初期建议用hashtable,因为简单,将来升级到Memcached 。
6.缩略图的处理,我看有的网站是在上传图片的时候直接生成,有的是在httpmodle里处理,访问的时候生成.
直接生成缩略图的好处是节约性能。httpmodle相反,每次浏览图片的时候都会生成新的图片,服务器压力大,建议直接生成。
7.同一个网站的多语言该如何处理是好,使用配置文件然后cookie或url来判别?
多语言建议使用asp.net自带的资源文件的方式实现,当前语言保存在cookie里面。
8.电子商务网站最多的就是 商品的打折方式和积分的赠送了,这里要怎么设计才好(工厂模式)?
规则引擎
9.如果同一时间并发大量订单的话,如果确保一个订单的有效提交呢?
使用MQ队列
10.日志方面,log4net?
log4net只能记录程序运行日志,主要目的是用来调试程序的,系统业务操作日志还你是得自己建一个表来保存。
11.电子商务的全文检索,这也是个头疼的问题
lucene,微软索引服务,sqlserver全文检索,方案很多的。
12.负载均衡方面,有什么好的文章推荐码?
可以看windows 2003 集群方面的文章 1.项目划分是否会有问题,图中分别是 实体层,数据访问接口层,数据访问层,业务逻辑接口层,业务逻辑,网站A,B,C
目前我也是这样分的,不过当数据表结构有修改时,会带动其它层的联级修改,非常不方便,所以开发之前最好将数据库设计地完善一点。另外,当网站分成多个以后,其它项目生成的DLL文件要部署到每个网站的bin文件夹里,更新一次都要重新部署,这也是个挺烦人的事,当然可以将DLL部署到GAC里来解决这个问题,不过这样的话本地调试起来就不太方便了,因为项目一有改动,就要将生成的DLL重新拷贝到GAC里才能看到效果。
2.数据访问层是要开发效率(NBear,Linq,Nh等),还是访问效率(直接使用sql等)?是否可以先使用开发效率高的,等日后访问量大了,再重写并替换数据访问层?
这个我也在考虑。目前我还没有采用ORM框架,都是在DAL里直接访问DB的。
3.网站被切割成了多个子网站,有一些控件(如header,footer)是要共享的,如何跨网站项目共享这些控件呢?
自定义控件。
4.ms的mvc 1.0也出来不少时间了,是否已经够成熟运用到项目中?或者是网站后台使用webform的,前台使用mvc?
正在学习这一块。
5.网站数据的缓存是自己开发一个hashtable什么的来维护呢,还是使用Memcached ?
现在我用的比较多的是.net自带的数据缓存。
6.缩略图的处理,我看有的网站是在上传图片的时候直接生成,有的是在httpmodle里处理,访问的时候生成.
直接生成好,快一点。
7.同一个网站的多语言该如何处理是好,使用配置文件然后cookie或url来判别?
我没涉及到这一块,不过我觉得资源文件应该就是用来处理这个问题的。
8.电子商务网站最多的就是 商品的打折方式和积分的赠送了,这里要怎么设计才好(工厂模式)?
这些都放在逻辑层好了。
9.如果同一时间并发大量订单的话,如果确保一个订单的有效提交呢?
MSMQ
10.日志方面,log4net?
目前我是自已写代码存在库里的。
11.电子商务的全文检索,这也是个头疼的问题
用lucene.net分词建索引,再直接从索引库里搜索,又快又准。
12.负载均衡方面,有什么好的文章推荐码?
不清楚了。 这样的设计要达到新蛋的效果肯定不可能的,新蛋少说几百台服务器,不同数据库之间的发布订阅链路都有几千条。有复杂的缓存,负载均衡机制。新蛋所有的通讯都是基于WCF的。另外对于这么大型的网站来说,数据库一刻都不停止,所以读写分离也很重要,因为你也不可能让数据库停下来进行备份。总归要做到新蛋这样的大型电子商务网站,靠你上面画的这点好像远远不够。
不过关于公共的header,footer,我不建议做成自定义控件,这个维护起来不方便,稍有变动就要发布dll,麻烦的。
如果你的header和footer不是很大的话,建议采用js+css的方式。然后加上压缩和cdn缓存,应该效率上能接受。
② 如何学习自动化测试
软件自动化测试的学习步骤
大概步骤如下:
1. 做好手工测试(了解各种测试的知识)-> 2. 学习编程语言-> 3. 学习Web基础(HTML,HTTP,CSS,DOM,javascript)或者 学习Winform
-> 4. 学习自动化测试工具 ->5. 学习自动化测试框架 -> 6. 实现自动化测试用例 -> 7. 开发自动化测试工具 ->8. 开发自动化测试框架
自动化测试的最高境界是: 开发测试工具,设计自动化测试框架, 让别人用。
自动化测试的本质
自动化测试的本质是:用程序测试程序。 也就是说学习“编程语言”是学习自动化测试的基础。
很多人问小坦克我学自动化测试,应该去学什么自动化工具。 我的回答是,第一步:应该先学习编程语言,以后再去学自动化测试工具
自动化测试是一定要写代码的, 编程语言水平的高低决定了自动化测试水平的高低, 有了扎实的编程技术,干什么都可以。
学习编程语言时, 要把自己当做开发人员, 系统地学习各种编程知识。
自动化测试学习的误区
很多新手一开始,就学习复杂的自动化测试工具, 我觉得这样是本末倒置了。
如果不先理解HTTP协议, 就不会理解Jemeter, LoadRunner, Fiddler, SoapUI这些工具的。
如果不先理解HTML,DOM, 就不会理解Firebug 这种工具的
如果不先理解Win32 API, 就不会理解Windows 窗体自动化测试的原理的。
如果自己没有开发过网站, 就不会理解网站的各个方面,测试起来难免有遗漏。
总之学习自动化测试,需要循序渐进, 把基础打好。
自动化测试的职位
自动化测试工程师的职位叫做: (SDET) Software Development Engineer in Test. 专注于自动化测试
手动测试工程师叫: (STE)Software test enginer. 专注于手动测试
在微软有很多SDET的职位,但是没有STE的职位, STE职位一般都是外包给外包公司的, 目前自动化测试还是非常吃香的。
自动化测试分类
自动化测试也有非常多的种类,
对Web UI 的自动化测试程序
对Windows 窗体UI的自动化测试程序
API测试, 比如(测试WCF service, Web API 等)
数据库测试, 比如测试存储过程
接口测试 (这种只能用自动化测)
单元测试
性能测试, 性能测试都需要用到自动化
③ 学软件开发专业需要哪些基本素质
需要追求真理的决心,开发的软件每个人写的都会不一样,唯一要求一样的是真理,究竟你做的是解决实际问题、软件是否有他的存在意义这些就要靠真理来验证。
需要博学,集思广益,不要钻牛角尖单学哪一种语言,觉得他独大,应该多上论坛、多向别人学习交流,软件使他的适用环境,你需要满足各种各样的环境。语言的原理也是相同的,只有在你知识够丰富才能触类旁通。
需要循序渐进,一口吃不成胖子,你可以抄袭别人代码做些自己能力范围外的事情,但是要想办法把他理解透,编程自己的东西,在使用的时候能举一反三。
需要有耐心,急功近利反而弄巧成拙,在你没学到真本事之前,他是产生不了实际价值的,就像大学生上编程课一样,学来学去全是算法基础,甚至看不到一个程序能真正用起来,但是毕业了就知道,这些东西哪里都能用。偶尔同学们会问你写软件多少钱一个月,对比下做泥工发现差了一大截,结果做软件还不如做泥工。这就看你怎么理解了,做泥工也不应该受到歧视,做软件是你的一生的职业。
需要社会经验,你给人家做ERP流程管理就要精通ERP业务逻辑和他的企业运作模式,给人家做游戏就要了解市场需求和本身的定位,做网站推广就要熟悉业务范围和SEO优化,不然做出来的都是自娱自乐的小玩意。
④ SQL存储过程定义的变量赋值问题
你都把字段值加起来了,那还要SUM()函数干嘛呢?直接写成wcfy:=select ZSF+QTFY+CCF+CCBZFY+WCRLF from LQSHDWCSQD where WCDH=dh_in;
就可以了(如果字段ZSF,QTFY,CCF,CCBZFY,WCRLF是在一条记录里的话 )。
⑤ .NET的3.5特性
VS 2008的多定向支持
VS 2008允许你构建针对多个.NET框架版本的应用。你可以从下面的博客贴子里进一步了解其中的工作原理:
VS 2008 Multi-Targeting Su ort
VS 2008 Web设计器和C 支持
VS 2008包含一个显着改进的HTML web设计器。该设计器提供了分割视图编辑,嵌套母板页,以及出色的C 集成。
A .NET还提供了一个新的控件,该控件对数据UI场景提供了非常灵活的支持,允许对输出的标识做完全的定制,与VS 2008中的新C 支持还有良好的协作。
A .NET AJAX和JavaScript支持
.NET 3.5 内置提供A .NET AJAX,还添加了支持We art的UpdatePanel,支持JSON的WCF,以及N个缺陷修补和性能改进等方面的新特性。VS 2008还对集成JavaScript和AJAX进你的应用提供了极棒的支持:
VS 2008 JavaScript Intellise e
VS 2008 JavaScript Debugging VS 2008中的新VB和C#编译器对这些语言做了显着的改进。两者都添加了函数式编程概念的支持,允许你编写更干净,更简洁,更具有表达性的代码。这些特性还促成了我们称之为LINQ(语言级集成查询)的新编程模型,使得查询和操作数据成为.NET中的一等编程概念。
下面是我撰写的一些讨论这些新语言特性的文章(用C#作为示例):
自动属性,对象初始化器,和集合初始化器
扩展方法
Lambda表达式
查询句法
匿名类型
LINQ to SQL中的数据访问改进
LINQ to SQL是.NET 3.5中内置的OR/M (对象关系映射器)。它允许你使用.NET 对象模型对关系数据库进行建模。然后你可以使用LINQ对数据库进行查询,以及更新、插入,删除数据。LINQ to SQL完整支持事务,视图和存储过程。它还提供了一个把业务逻辑和验证规则结合进你的数据模型的简易方式。下面是一些我讨论如何使用LINQ to SQL的文章:
Part 1: Introction to LINQ to SQL
Part 2: Defining our Data Model Cla es
Part 3: Querying our Database
Part 4: Updating our Database
Part 5: Binding UI using the A :LinqDataSource Control
我会在以后的几周内再往这个系列里添加几篇文章。我认为你会发现LINQ to SQL显着地简化了构建非常干净的数据模型以及编写极其干净的数据代码。 在安装VS 2008 和.NET 3.5 Beta2之后,还有2件重要的事情你应该马上做:
1) 你应该下载和运行这个批文件。这只要几秒钟就可以运行完,它修补了这个星期早些时候我们发现的System.Web.Exte io .dll版本政策的问题,该程序集包含了 A .NET AJAX。如果你不运行这个批文件,那么用A .NET AJAX 1.0 和 VS 2005构建的现有的A .NET 2.0项目就会自动地运载随 .NET 3.5 Beta2发布的新A .NET AJAX 版本。这会工作而且运行良好,但会不小心导致你的VS2005应用依赖于.NET 3.5。运行这个批文件会改变新的System.Web.Exte io .dll程序集的版本绑定政策,确保你只在你明确构建.NET 3.5项目时才使用新的.NET 3.5 A .NET AJAX版本。
2) 假如你曾经在你的机器上安装过Orcas或VS 2008的早期版本(Beta1 或某个CTP 版本)的话,你需要在安装Beta2后重新设定你的VS 2008设置。如果你不这么做的话,有些设置会非常奇怪(一些窗口在出现在奇怪的地方),你也有可能看到一些IDE性能问题。你可以在命令行上对VS 2008的IDE版本键入“DevEnv /resetsettings”来重新设定你的配置。
⑥ 服务器重启后SQL SERVER 2005莫名其妙被还原
你描述的问题,在理论上是不可能发生的,事实上,也不可能发生.
导致这个问题原因,我个人经验,通常是2个:
1:你的程序中包含一个事务(可能是sql中的事务,也可能是windows的分布式事务),这些事务在执行后,没有正确提交,而在次过程中,你又重启了服务,数据库自然回滚到初始状态.
2:你的数据库或者软件中,包含了一段数据库的备份/恢复代码(当然,数据库计划也是有可能的)
处理:重新检测你的程序以及数据的执行计划.
⑦ 浙大网新仿真实训的课程体系
“3”步走专业课程实训:静态知识课程→个人动态任务课程→团队动态项目课程。
静态知识课程补充项目实战技能;个人动态任务课程则是对学员进入团队项目开发实训前的专项训练;团队动态项目课程由网新集团项目经理带领学员组成项目研发组,按照企业项目开发流程进行的真实项目开发,学员在项目开发过程中将理论运用到实际,参与项目研发,了解企业项目开发流程,最终具备项目研发的经验和能力。
“1”大职业课程:职业技能课程包括职场礼仪、时间管理、有效沟通、团队协作等内容,旨在帮助学员掌握职场成功必备的软技能。 JAVAEE实训
1.强大的师资力量
上课的讲师全部是资深的一线架构师,具备超强的实战能力,经历过众多的项目,解决过无数问题,能协助扫平你学习道路上的绝大多数问题。请参见导师介绍中Java相关导师介绍。
2.科学的教学过程
教学过程遵照最适合快速学习的路径,绝不会重复书上的枯燥过程,快速搞定书上讲解的大部分内容。入门手把手,中期实例演示适当扩展,后期启发式独立完成。最终能脱离老师,独立解决职业生涯中未知的问题。
3.有趣实用的项目反推式教学
突破传统的教学方式,在知识点讲解之前,先分析项目,罗列出项目中使用的知识点,然后分别学习演练,逐个击破。学完知识点,也做完了项目。
4.真实的企业级项目案例+开发过程
我们使用的项目案例全部是实际的项目,并且完全按照企业级项目团队的开发方式组建团队,使学员能真实感受真正企业的开发流程。
.NET实训
1,熟练C#,对.NET Framework有深刻认识,熟练使用VS2008开发环境;
2,熟练HTML,CSS,div+css,XML、AJAX,Javascript、JQuery等开发;
3,熟练WS、SOCKET、Remoting、WCF、WPF、Silverlight、Linq、MVC框架;
4,熟练SqlServer、Oracle等主流数据库,熟练视图、存储过程、触发器等;
5,熟练使用Power Designer、Visual Source Safe、Visio等工具;
6,熟练熟悉多层架构,有面向对象的分析经验,熟悉软件开发流程、较好的文档能力及良好的编码风格;
7,熟悉Windows Phone 7手机3G开发;
8,具备开发电子商务网站、家庭理财项目、金融类产品、呼叫中心、地图开发等项目经验;
9,拥有较好的自学能力、踏实的工作作风、谦虚的精神、良好的沟通技巧、优秀的团队合作能力;
10,课程结束后,学员具备相当于1年以上工程师水平;
C++企业级应用开发
第一阶段:Linux基础
课程目标:通过学习Linux,使学员能够掌握Linux的安装配置,基本操作。
一 掌握Linux的安装、配置
二 掌握Linux的常用命令
第二阶段:Web技术和数据库基础教
程课程目标:掌握常用数据库的操作,掌握VBS脚本语言,对后期自动化测试工具中VBS的使用,打好编程基础。
一 掌握基本的Web技术,VBScript脚本语言
二 掌握XML基本语法
三 掌握SQLServer、Oracle、MySQL等常用数据的操作
四 掌握HTTP协议课程目标
Android高端实训班
业内统计,目前国内的3G研发人才缺口有三、四百万,其中Android研发人才缺口至少30万。Android开发人才占IT人才总需求的72%。据职酷网数据统计显示:目前热招的Android技术相关岗位约有3882个,而一个月内的有效岗位量在2298个。主要热招职位包括Android开发工程师、Android软件工程师、Android应用开发工程师、Android系统软件开发、Android程序员等。
职场专家指出,想要从事Android开发的人员,除了基础的计算机技术知识要扎实之外,要根据各类企业、各类岗位的不同需求,补充与岗位相关的Android技术知识。此外,还要注重项目经验的积累。
Iphone高端实训班
1、移动互联网设备的发展是一个显而易见的趋势,顺应后PC时代的趋势将使你获得更大的发展机会。
2、iPhone/iPad在这个领域处于领先地位,其优势非常明显。
3、无论是自主创业,还是求职,iPhone/iPad开发都是目前最紧缺、收入水平最高的开发职位之一。
4、全套引进苹果官方的标准化实战培训方案。
5、中国引导式培训和欧美启发式教育想结合,在传授知识的同时,培养学员的独立构思能力。
大型机课程
大型机操作系统基础理论和操作方法: 描述大型机操作系统的基本概念,介绍大型机(Mainframe)的优势,介绍如何用仿真终端登录Mainframe开发环境以及在该环境下工作的基本技巧,包括:学习启动TSO的方法、ISPE/PDF画面间的切换及各功能的使用方法、如何使用ISPF/PDF分配和编辑数据集、建立和管理数据集等内容。
大型机操作系统的管理维护: 解释大型机操作系统下的系统管理、存储管理、数据管理、任务管理、输入输出进程以及通信系统等概念。
⑧ 把HTML CSS Javascript 学完了还要学什么啊,
第一阶段:前台工程师
1 入门:学html。
2 进阶:学css。
3 中级:学javascript。
4 高级:活学活用这三者结合,这一步需要大量的实践。
5 高手:建议学一下jQuery,是javascript操作html和css的利器。
6 终极:建议学一下PS和Flash,如果javascript学的好,再顺便学一下Action Script
第二阶段:.Net 后台工程师
1 初级:数据库基础:Access
2 入门:数据库SQLServer以及查询语句
3 中级:VB.Net或C#基础
4 高级:ASP.Net操作数据库,以及数据库存储过程的编写
5 高手:AJAX结合前后台
6 终极:熟悉操作系统中的组件,建议学习MVC、WCF等
第三阶段:J2EE后台工程师
与第二阶段类似,过程中你会觉得和C#如同双胞胎一样接近
以上是我走过的路,当然不一定适合你,推荐一篇文章:《程序员箴言》,很早以前看过的,或许网上有,你会成为优秀的程序员的!
⑨ .net如何架构分布式系统
既然都是分布式,那只能用服务的方式来做了。
从最低层开始搭建.
数据路:用SQLserver,为了访问速度一定要用存储过程。千万别用EF。
逻辑程序:用WCF作服务,好处就不用说了。工作量大大降低,同时支持web系统,桌面程序,安卓等,只需要写一次逻辑代码。
界面层:主要是以web的方式呈现。这里用aspnet的MVC4来开发,引用WCF服务,扩展灵活,维护方便。一般把系统的核心管理模单独独立出来,做成桌面应用程序,也是引用WCF服务。这样做是为了系统的安全,一般只有高级管理员使用该桌面应用。
移动端:用WerServer来做API,手机版web,安卓客服端,IOS客服端都用API来开发,这里还是引用WCF服务。
⑩ ADO.NET实体数据模型讲解
ADO.NET是。NET与数据库互操作的核心,而ADO.NET实体数据库则增强了。NET应用程序与数据库的互联能力,通过ADO.NET实体数据模型我们可以很方便的与底层数据库进行强类型的数据互操作。大大的方便了设计人员,从而也提高了数据库操作的安全性。
最近在使用到Silverlight的领域数据服务时遇到一个很特别的问题[在应用程序中的结果和数据库的结果不一样],经过反复的试验,终于找到了问题的根源,那就是ADO.NET实体数据模型依赖于实体键,它的查询会生成实体键的唯一结果集。
现在来看看具体的操作过程和处理方式:
为了对数据库的表进行操作,在数据库的视图中建立了一个连接两个原子表的
vw_DesksAndUsers
的视图,这个视图旨在为了连接已存在的User表和Desk的数据,于是我做了如下的T-SQL的视图,如下所示:
在SQL
Server
2008中得到的查询结果如下:
也就是说得到了预期的结果,[这一步很成功].接下来进行第二步。
第二步:新建一个Silverlight商业应用程序SilverlightDomainDb,在生成的项目中会支持WCF
RIA服务。这是对Silverlight领域服务的支持所必须的。
第三步:在Web项目中添加一个ADO.NET实体数据模型的新项,在向导中选择相应的数据库连接和数据表、视图及存储过程等,完成以后会生成相应的实体数据类型和上下文,并得到。edmx的模型图。如下所示:
根据Visual
Studio
2010的提示,它为我们生成了两个实体键:DeskId,IsPlaying(这是Desk表中的两个字段);现在重新生成项目。
第四步:根据实体模型添加Web领域服务项。(在这一步需要添加相应的表和元数据信息)
第五步:Silverlight项目中将数据源所在vw_DesksAndUsers
的Datagrid拖到Home.xaml中,完成、调试。并没有得到上面的结果,而是生成了如下的Datagrid:
经过仔细的观察,才发现原来是ADO.NET实体数据模型中的结果集依赖于实体键,也就是说Silverlight领域服务会根据实体键的唯一生成查询的结果集,于是就产生了上面的以DeskId为唯一键的数据。
处理:
根据以上的分析,要得到预期的结果,必须设置合适的实体键,为了不至于影响到底层的SQL数据库,我们只需要修改。edmx模型图中的的实体键即可(点击右键选中或不选中"实体键"):
现在重新生成项目并运行程序,程序得到了预期的结果。
Silverlight商业应用程序作为一个专为数据显示而生的模板,为数据库的呈现提供了友好的界面,由于其优化的数据库的处理方式使得我们在使用时不得不考虑一些它们之间的细微差别[由于在Visual
Studio中没能看到有LINQ生成的T-SQL查询语句,所以我也只是提供了一个简单的解决方案而已],我想其深层的原因在于LINQ查询中生成的T-SQL语句与数据库中的T-SQL语句不同而产生。