两个DbContexts使用相同的模型,保存时出错

时间:2017-05-16 15:58:29

标签: c# asp.net-mvc database entity-framework entity-framework-6

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

以下是该方案: 我要使用名称为T1EntitiesInterfaceDbContext

的DbContext类

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

像这样:

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

public class InterfaceDbContext : DbContext
{
    public DbSet<Order> Orders { get; set; }
}

在我的GetOrder函数中,我试图只获取InterfaceDbContext中不存在的那些订单并尝试在该上下文中插入。

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();
}

我在保存时遇到异常:

  

EntityFramework.dll中出现'System.InvalidOperationException'类型的异常,但未在用户代码中处理   附加信息:IEntityChangeTracker的多个实例无法引用实体对象。

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

1 个答案:

答案 0 :(得分:0)

来自How do I detach objects in Entity Framework Code First?

var orders = _t1Db.Orders
    .AsNoTracking() // Query without tracking
    .Where(o =>
                interfaceOrders.All(x => x.id != o.id)
    )
    .ToList();