代码改变世界

WCF 附录 高级主题 在WCF中使用LINQ

2011-06-12 18:05  DanielWise  阅读(1193)  评论(0编辑  收藏  举报

语言集成查询(LINQ)是.NET Framework 3.5 中的新技术,允许使用C#或者Visual Studio.NET 来查询数据。传统意义上来说,数据通过在一个应用程序中使用一个字符串表达式查询,比如SQL 或者XPath查询表达式,没有编译时的检查或者智能感知支持。LINQ通过让一条查询成为一个一流语言结构来使用这些能力。LINQ支持多种数据源包括SQL Server数据库,XML文档,ADO.NET DataSets以及.NET对象。LINQ提供一个单一的架构在这些不同的数据源之间查询数据。使用LINQ可以帮助建立数据世界与对象世界的桥梁。

暴露LINQ-to-SQL 实体

LINQ-to-SQL引用LINQ中的特性来讲存储在SQL Server 中的相关数据暴露为对象。这为存储在一个数据库表中的数据与存储在一个应用程序中的对象建立了很好的映射关系。这通常称为对象引用映射(ORM). 为了帮助实现这个映射过程,Visual Studio 2008 提供了对象关联设计器。这提供了一个创建LINQ-to-SQL实体的虚拟设计器。图片A.3 显示了LINQ-to-SQL实体的对象相关设计器。

 

图片A.3 LINQ-to-SQL对象相关设计器

  需要知道的一件事是设计器默认不适用DataContractSerializer来暴露LINQ-to-SQL实体。这意味着LINQ-to-SQL实体不能通过WCF服务暴露出来。使用一个服务暴露存储在一个数据库中的实体的能力对开发面向服务的应用来说非常重要。幸运的是,微软提供了一个称为Serialization模式的属性,它存在于LINQ-to-SQL设计器表面。设置这个属性为UniDirectinal允许LINQ-to-SQL实体使用[DataContract]和[DataMember]属性来标记。这将LINQ-to-SQL实体以一个数据契约的形式暴露给WCF,也意味着可以被WCF序列化。这个设置也可以使用SqlMetal.exe命令行实例来配置。这个实例可以用来为LINQ-to-SQL实体从一个SQL Server 数据库生成代码。在命令行传递/serialization:Unidirectinal参数会指导SqlMetal.exe 生成可以被WCF序列化的类型。