具有自定义类和WCF契约的实体框架4 + POCO(序列化问题)

时间:2010-11-08 07:46:43

标签: c# wcf entity-framework-4 repository-pattern poco

昨天我参与了一个项目,我用Repository模式升级到Entity Framework 4。在一篇文章中,我已经读过有必要关闭自定义工具生成器类,然后手动编写类(类似于entites)。我可以这样做,我使用POCO Entity Generator然后删除了新生成的文件.tt和所有从属.cs类。然后我自己写了“实体课”。

我添加了存储库模式并在业务层中实现了它,然后实现了一个WCF层,它应该从业务层调用方法。通过从表示层调用插入(添加)方法,一切正常。但是如果我调用任何应该返回某个类的方法,那么我会得到一个错误(连接被服务器中断)。

我认为序列化存在问题,或者我错了?如何通过这个问题解决?

我正在使用Visual Studio S2010,实体框架4,C#。

更新

我上传了这个项目,希望有人能帮助我! link text

更新2:

我的问题:

  1. 为什么POCO好(利弊)?
  2. 什么时候应该使用POCO?
  3. POCO +存储库模式是一个不错的选择吗?
  4. POCO课程应该由我自己编写还是我可以使用自动生成的POCO课程?

3 个答案:

答案 0 :(得分:1)

为什么POCO好(利弊)?

  • 与EF4,NH及其他少数人合作-ORM

什么时候应该使用POCO?

POCO +存储库模式是一个不错的选择吗?

  • 对于WCF

    POCO-您手动更改了跟踪,

    STE自动更改跟踪已完成。

POCO课程应该由我自己编写还是我可以使用自动生成的POCO课程?

  • T4会是更好的选择。

答案 1 :(得分:0)

关于您的WCF序列化问题,在t4模板中,我们需要设置ProxyCreationEnabled = false;在ContextOptions上

http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontextoptions.proxycreationenabled.aspx

答案 2 :(得分:0)

对于POCO序列化,您需要ProxyDataContractResolver。

您可以查看this MSDN Walkthrough article,了解如何构建可应用于服务合同的自定义属性,以序列化POCO代理类型。