【问题标题】:WCF with Entity Framework Error带有实体框架错误的 WCF
【发布时间】:2010-08-17 20:10:00
【问题描述】:

错误:ObjectContext 实例已被释放,不能再用于需要连接的操作。

我正在尝试使用实体框架(VS 2010、.NET 4)创建 WCF 服务。当我运行它时,我得到了上述错误。

我读过一些关于编辑 T4 模板的内容,但它似乎已经有了

[DataContractAttribute(IsReference=true)]
public partial class Person : EntityObject

   [DataMemberAttribute()]
        public global::System.Int32 ID
        {
            get
            {
                return _ID;
            }

不知道有什么区别

[DataMemberAttribute()] and [DataMember] 

[DataContractAttribute(IsReference=true)] and [DataContract] 

要么。

 public Person GetPersonByID(int id)
        {
            using (var ctx = new MyEntities())
            {
                return (from p in ctx.Person
                        where  p.ID == id
                        select p).FirstOrDefault();
            }
        }

WCF 和 EF 如何正确地协同工作?

【问题讨论】:

    标签: entity-framework c#-4.0 wcf entity-framework-4


    【解决方案1】:

    您的 Person 类中有导航属性吗?您是否禁用了延迟加载?否则它可能会在序列化期间尝试加载导航属性的内容,并且由于关闭上下文而失败。

    关于您的其他问题:

    [DataMemberAttribute()] 和 [DataMember] 相同。它只是一个较短的名称。

    [DataContractAttribute(IsReference=true)] 和 [DataContract] 不相同。 IsRefrence 允许在导航属性中跟踪循环引用。如果没有这个参数,循环引用会导致递归永无止境。

    【讨论】:

    • 当我将延迟加载设置为 false 时,它​​可以工作。我是否可以假设 WCF 无法通过延迟加载处理 IEnumerables?通常如何处理大型数据集(数十万条记录),总是过滤到一个子集?
    • 最好的方法是只发送必要的子集。我认为您可以使用 IEnumerable 定义操作。在客户端站点上,它将作为数组处理。
    • 问题是延迟加载。我需要详细了解如何使用 WCF 处理大型数据集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    相关资源
    最近更新 更多