分布式开发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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构