【问题标题】:Entity Framework 6 ability to reference nested objects on closed contextEntity Framework 6 能够在封闭上下文中引用嵌套对象
【发布时间】:2015-07-06 06:24:33
【问题描述】:

我有一个类可以在屏幕上加载我想要的所有数据。

我在 using 语句中加载所有数据,并在更高的类中返回结果记录。

我能够遍历对象,但任何嵌套对象都不可用,并且我收到错误消息“函数评估需要所有线程都运行”。当我尝试检查对象时。

返回给网页的错误是“ObjectContext 实例已被释放,不能再用于需要连接的操作。”

在 EF6 中是否有办法让我加载所有对象和嵌套对象并使它们在上下文之外可用?

【问题讨论】:

  • 作为快速修复,尝试在连接字符串中添加MultipleActiveResultSets=True 看看是否可以解决问题。
  • 已经设置为true
  • 您肯定需要在 fetch 上加入它。从以下答案之一的对话来看,似乎也存在映射问题。我可以建议你使用这个吗? visualstudiogallery.msdn.microsoft.com/…我已经在几个项目中使用过它,非常棒。

标签: c# entity-framework-6


【解决方案1】:

Using 语句会自动处理对象。

您可以在获取主要实体时使用 include 来获取相关实体。

https://msdn.microsoft.com/en-us/data/jj574232.aspx

【讨论】:

  • 是的,我只是在看,但现在我收到另一个错误“没有声明名为 'tblAddresses' 的导航属性”。
【解决方案2】:

DbContext 不应该长时间使用。最好实例化上下文,将所需的所有数据从中复制到某个数组/集合中,然后立即处理它。然后您可以使用此数组/集合访问您的数据。

示例: 在控制器类中

Person[] people = Repo.GetAllPeople();

在 Repository 类中你有类似的东西:

public People[] GetAllPeople()
{    
    try
    {
        MyDbContext cont = new MyDbContext();        
        return cont.People.ToArray();
    } 
    catch { return null; }    
    finally { cont.Dispose(); }
}

附: 是的 - using 语句就是这样:

try
{
   ...instantiate some_resource that inherits from IDisposable
   ...do something with this resource
}
finally {  some_resource.Dispose(); }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2022-01-02
    相关资源
    最近更新 更多