silverlight   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用Entity Framework和WCF Ria Services开发SilverLight之6:查找指定字段大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

对数据库表指定字段的查找,又是实际工作中的一项必要工作。SL客户端仅获取实际需要的指定的字段,好处很多,比如:有助于减少网络流量。 有两类这样的使用场景。 1:联表查询不需要外键表 在上一篇中,我们使用了联表查询,在联表查询中,DAL部分的代码是这样的: 我们已经指出,无论是你是否使用Include方法,只要实体类指定了Include特性,客户端都会获取到被关联的Course记录。诚然,有时候我们

数据库表指定字段的查找,又是实际工作中的一项必要工作。SL客户端仅获取实际需要的指定的字段,好处很多,比如:有助于减少网络流量。

有两类这样的使用场景。

1:联表查询不需要外键表

上一篇中,我们使用了联表查询,在联表查询中,DAL部分的代码是这样的

使用Entity Framework和WCF Ria Services开发SilverLight之6:查找指定字段

我们已经指出,无论是你是否使用Include方法,只要@L_673_9@指定了Include特性,客户端都会获取到被关联的Course记录。诚然,有时候我们需要满足联表查询,但是其他时候我们不需要。

2:单表中仅仅需要部分字段

比如:一个表有5个字段,我仅需要返回两个字段。

3:实现

要满足这样的需求,仅仅需要修改DAL部分。

第一种需求,取出指定字段:

使用Entity Framework和WCF Ria Services开发SilverLight之6:查找指定字段

这段代码生成sql语句如下:

SELECT 
[Extent1].[DepartmentID] AS [DepartmentID],[Extent1].[Name] AS [Name]
FROM [dbo].[Department] AS [Extent1]

可以发现,EF只为我们查询两个字段。并且,EF也没有为我们自动关联Course表的数据。

注意,在这代码中,我们先SELECT new了一个匿名类型,这样就绕过了DbContext中的DbSet<T>对于Department类型校验。如果我们想当然的将这段代码写成:

使用Entity Framework和WCF Ria Services开发SilverLight之6:查找指定字段

那么,我们会发现无法获取数据,跟踪错误,会发现:

   {"The entity or complex type 'SchoolData.Department' cAnnot be constructed in a LINQ to Entities query."}    System.SystemException {System.NotSupportedException}
最终运行的效果如下:

使用Entity Framework和WCF Ria Services开发SilverLight之6:查找指定字段

回过头来说,如果既要指定字段,又要联表查询,应该怎么做呢?如下:

使用Entity Framework和WCF Ria Services开发SilverLight之6:查找指定字段

最终运行效果如下:

使用Entity Framework和WCF Ria Services开发SilverLight之6:查找指定字段

由于本部分的代码上一篇修改而成,故不再提供下载。

PS:整了一圈回来,才发现DUDU已经把这个问题研究的很深刻了,在:

http://www.cnblogs.com/dudu/archive/2011/04/01/entity_framework_select_new_ok.html

http://www.cnblogs.com/dudu/archive/2011/03/31/entity_framework_select_new.html

大佬总结

以上是大佬教程为你收集整理的使用Entity Framework和WCF Ria Services开发SilverLight之6:查找指定字段全部内容,希望文章能够帮你解决使用Entity Framework和WCF Ria Services开发SilverLight之6:查找指定字段所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。