[导入]分布式开发1------Linq对WCF的序列化支持
这篇文章准备了很长时间,真的是没时间写.今天就来完善吧!在我之前的Linq对WCF序列中的解决方案(参考http://www.cnblogs.com/viter/archive/2008/03/27/1126203.html),我说过这个方案并不很
好,一直在寻找更好的解决方案.
那我们就以一个"商品采购"来作为开篇吧.这个"商品采购"的解决方案将会在这个系列中一直存在.废话少说,来看需求说明.
客户在登录网上采购系统后,将会进行采购操作,涉及"采购入库,采购结算",为了让大家更容易理解,这个采购将会很粗糙(简约而不简单),呵呵
.OK,来看,数据库将会产生二张表,采购订单头(PurchaseOrderHeader),采购订单细目(PurchaseOrderDetail);这个数据库使用了
微软的示例数据库(AdventureWorks).
首先我们建立一个解决方案: PurchaseDemo
添加一个类库,接着在类库里面添加Linq to sql类,并取名为Purchase,系统将会自动帮我们重命名为:PurchaseDataContext,
好了,现在切换到设计视图,什么都没有,没关系,把建好的表拖进来吧!
细心的朋友可能会发现,这两张表都有一个字段叫做(timestamp),类型和名称一样的,后面我们再介绍是干啥用的.现在没必要,只要你注意到它的存在就可以了.
选择PurchaseOrderHeader(把自增列和RowGuid及timestamp列都设置为自动生成),就是把Auto Generated value 设为true,PurchaseOrderDetail表也如法炮制.
好,现在来看最重要的,不要选中任何表,在dbml的设计页面上右击选择属性,把Sericlization Mode值改为:Unidirectional.
好了,现在保存文件,打开dbml的代码看看每个类的头顶多了什么东西?
类中的属性又多了什么东西,天呀,漂亮的帽子(DataContact和DataMember).很好,这就是我们想要的,只要
我们把Linq上下文的序列化模式改为单向,它将会自动的支持WCF的序列化,真的就这么简单?对对对,真的就是这么简单!
现在你的Linq to sql中的类已经可以支持WCF直接序列化到客户端了,但是请注意,有一点小小的遗憾.就是自从Linq上下文改为序列化单向后,所有的关系都只能在服务器使用,客户端是一点都没有的,唉~~,难道天要绝我?不要!
突然被电击了一下,灵光突现.Partial关键字,对,就是它了.马上动手,为PurchaseOrderDetail和PurchaseOrderDetail添加一个部分类,
并添加两类之间的关系,并手动加上DataMember标记为可支持WCF序列化,
以后不管DBML文件怎么改动,这个关系都是可以不变的.解决!当然,如果你现在要用这两个类直接进行数据操作的话
,不好意思,是会出错的.这一篇只是介绍"Linq对WCF的序列化支持",关于数据操作,将会在下一篇继续...
如果有说得不对的地方,欢迎拍砖~.
点击这里下载源代码(内含sql文件).
https://files.cnblogs.com/viter/PurchaseDemo.rar
[新闻]微软推新型搜索技术"BrowseRank"挑战谷歌
文章来源:http://www.cnblogs.com/viter/archive/2008/07/27/1252655.html