我正在通过WCF序列化linq对象。 dbml设置为单向序列化。
我的对象非常简单:预算有一系列BudgetLineItems。每个BudgetLineItem都有一个ItemCateogry。
Budget / BudgetLineItems序列化正常。但是,每个BudgetLineItem上的ItemCateogry都没有。我注意到默认情况下,linq没有为每个BudgetLineItem在ItemCategory上添加[DataMember]。我手动添加它,并使用[IgnoreDataMember]删除了ItemCategory实体上任何可能的循环引用。但不是运气。
的问题:
默认情况下,wcf可以序列化多对一关系,还是我错过了什么?我知道序列化的数据会相当减少每个BudgetLineItem的重复ItemCategory数据,但这很好。
我是否需要为此自定义DataContractSerializer?
**编辑**实际上,这确实有效(添加[DataMember]),我只是没有更新客户端上的服务引用(duh)。
新问题:有没有办法告诉linqtosql设计器在设计器生成的实体上维护那些[DataMember]和[IgnoreDataMember]字段?否则我每次保存dbml时都需要更新它们。
答案 0 :(得分:3)
哇你成功为WCF序列化了你的LINQ 2 SQL对象吗?
当我尝试这个(非常不情愿,请参见下面的原因)它确实失败了,我的L2S实体中存在指向孩子的关系,然后孩子指向父母,显然在枚举构建WCF时对象,它不能以这种方式无限地遍历树,并且[我记得最好]它导致溢出异常,所以我基本上说的是要小心你是否走这条路!
关注Michael的帖子,我建议将你的WCF对象转换为POCO(自定义模型表示)。我很高兴上面没有用,因为我总是喜欢制作一个自定义的WCF对象,它传输一个干净的数据子集,正是WCF请求所需要的,然后它不包含一堆多余的数据。发送数据,我相信你的L2S实体有很多。我尝试直接通过网络发送我的L2S数据的实际原因是因为我必须制作一个使用某些“规则”的引擎,这些规则存储在大约4个数据库表与关系的相关性中,维护单独的维护是不可行的。 WCF对象。
所以最后我最终做的是扩展自定义代码生成类以包含Wcf.cs和[DataContext],然后克隆属性L2S类 - > WCF自定义类。
它最终完美无缺,这是cloning procedure I used with instructions on my blog。
我对此很满意,并且不觉得有不良做法。希望这会有所帮助。
答案 1 :(得分:1)
您不应该使用WCF发送linq实体。而是建立自己的业务数据模型并通过网络发送。如果您更改了数据库,则不希望更改与服务连接的每个程序