分布式开发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 

 

 

posted @ 2008-07-27 17:48  Ron.Liang  阅读(3242)  评论(13编辑  收藏  举报