EF 4.2 DbContext多个IEntityChangeTracker实例问题

本文关键字:IEntityChangeTracker 实例 问题 多个 DbContext EF | 更新日期: 2023-09-27 17:51:16

我有一个EF数据存储模式,这是我从头开始设计的,当通过使用它的web应用程序使用EF时工作得很好,但是我的任务是生产我的系统的WCF API版本,它只在检索数据时工作得很好。

当我尝试创建新对象时(这些对象是在web服务方法中创建的,并且没有从请求序列化),我得到以下问题:

An entity object cannot be referenced by multiple instances of IEntityChangeTracker
现在我在开发系统时已经看到了这个问题,但这是因为我为每个调用创建了一个新的上下文,我通过将我的上下文扔到HttpContext.Current中来纠正这个问题。项目,正如我所说的在web应用程序中工作得很好,但现在当我调用代码给我Context时,HttpContext是Null(如预期的那样),因此代码将再次为方法内的每个调用生成一个新的Context。

为了解决这个问题,我给了我的服务提供者在初始化服务提供者时发送上下文(作为参数)的能力。然后,我在方法的开头声明Context,这意味着该方法中的所有调用都使用相同的上下文。

但我仍然得到同样的问题?

示例代码:

public MyObject DoSomething()
{
    var dbContext = new myContext();
    var foos = new FooHelper(dbContext).GetAllFoos();
    var bah = new bah();
    bah.Foo = foos.First();
    bah.title = "youre a real object";
    new bahHelper(dbContext).Create(bah);
}

EF 4.2 DbContext多个IEntityChangeTracker实例问题

尝试正确处理上下文并测试错误是否消失,然后:

public MyObject DoSomething()
{
    using (var dbContext = new myContext())
    {
        var foos = new FooHelper(dbContext).GetAllFoos();
        var bah = new bah();
        bah.Foo = foos.First();
        bah.title = "youre a real object";
        new bahHelper(dbContext).Create(bah);
    }
}

当我发现这样的问题时,在我的情况下,我用由另一个上下文创建的实体填充了我的模型,所以我只是忽略了该实体并使用该Id再次重新创建它。只要确保在同一上下文中创建所有实体(包括嵌套实体)即可。

相关文章:
  • 没有找到相关文章