c# - 使用 WCF 序列化 linq 实体

标签 c# wcf linq-to-sql

我正在通过 WCF 序列化 linq 对象。 dbml 设置为单向序列化。

我的对象非常简单:Budget 有一个 BudgetLineItems 集合。每个 BudgetLineItem 都有一个 ItemCateogry。

Budget/BudgetLineItems 序列化良好。但是,每个 BudgetLineItem 上的 ItemCateogry 则不然。我注意到默认情况下,linq 没有在每个 BudgetLineItem 的 ItemCategory 上添加 [DataMember]。我手动添加了它,并使用 [IgnoreDataMember] 删除了 ItemCategory 实体上任何可能的循环引用。然而,运气并不好。

问题:

  1. 默认情况下,wcf 可以序列化多对一关系,还是我只是遗漏了某些内容?我知道序列化数据与每个 BudgetLineItem 的重复 ItemCategory 数据相当冗余,但这很好。

  2. 我需要为此执行自定义 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/

相关文章:

linq-to-sql - Linq 到 SQL : Is it better to have a small DataContext for each page or a global one?

c# - 如何将新字符串添加到 REG_MULTI_SZ 类型的注册表项?

javascript - C# 中是否有一个knockoutjs 计算等效项?

C# WCF 将列表类型作为对象返回时发生异常

wcf - 无法获取 WCF 测试客户端来测试 WCF 服务库

c# - Windows 服务选项

c# - Where 子句内的 Linq Intersect(...).Any() 抛出 NotSupportedException

c# - 基于 XML 数据创建动态 linq-XML

c# - 如何在 asp.net 中使用 javascript 获取选定复选框列表项的值

c# - Entity Framework : Skip few columns or select as null from related entities