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