C# 使用相同模型的两个DBContext,保存时出错

C# 使用相同模型的两个DBContext,保存时出错,c#,asp.net-mvc,database,entity-framework,entity-framework-6,C#,Asp.net Mvc,Database,Entity Framework,Entity Framework 6,我正在尝试从dbContext获取数据并将其保存到其他dbContext。 实际上,我想从数据库A导入一些基于验证的数据库,并将其存储到数据库B。我知道还有其他方法可以做到这一点,但我想使用EF和两个DBContext来实现 以下是场景: 我必须使用名称创建DbContext类:T1Entities,InterfaceDbContext 这些dbContext使用相同的模型。 就像我有一个名为orders的类,我将同一个类用于其他上下文 这样说: public partial class T1E

我正在尝试从dbContext获取数据并将其保存到其他dbContext。 实际上,我想从数据库A导入一些基于验证的数据库,并将其存储到数据库B。我知道还有其他方法可以做到这一点,但我想使用EF和两个DBContext来实现

以下是场景: 我必须使用名称创建DbContext类:
T1Entities
InterfaceDbContext

这些dbContext使用相同的模型。 就像我有一个名为orders的类,我将同一个类用于其他上下文

这样说:

public partial class T1Entities : DbContext
{
    public virtual DbSet<Order> Orders { get; set; }
}

public class InterfaceDbContext : DbContext
{
    public DbSet<Order> Orders { get; set; }
}
保存时,我在此处遇到异常:

EntityFramework.dll中发生“System.InvalidOperationException”类型的异常,但未在用户代码中处理 其他信息:一个实体对象不能被多个IEntityChangeTracker实例引用

请注意:我必须对其他上下文使用save Order类。我知道我们可以通过为每个上下文创建不同的其他类来实现这一点。

From


在将实体添加到第二个上下文之前,是否需要从第一个上下文中分离实体?我不确定。如何做到这一点?在检索数据之前关闭源上下文的代理创建,例如
\u t1Db.Configuration.ProxyCreationEnabled=false;var订单=\u t1Db.订单…
public List<orders_mstr> GetOrders()
{
    // getting interface db Orders
    var interfaceOrders = _interfaceDb.Orders.ToList();

    // getting T1 db orders which are not present in it interface db
    var orders = _t1Db.Orders
                    .Where(o =>
                                interfaceOrders.All(x => x.id != o.id)
                    )
                    .ToList();


    // trying to save the first object.
    _interfaceDb.Orders.Add(orders[0]);
    _interfaceDb.SaveChanges();
}
var orders = _t1Db.Orders
    .AsNoTracking() // Query without tracking
    .Where(o =>
                interfaceOrders.All(x => x.id != o.id)
    )
    .ToList();