【发布时间】:2017-10-15 19:39:40
【问题描述】:
我正在尝试从 dbContext 获取数据并将其保存到其他 dbContext。 实际上,我想从数据库 A 导入一些基于某些验证的数据库并将其存储到数据库 B。我知道还有其他方法可以做到这一点,但我想使用带有两个 DBContext 的 EF。
这是场景:
我必须使用名称的 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; }
}
在我的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 实例引用。
请注意:我必须将保存订单类用于其他上下文。我知道我们可以通过为每个上下文创建不同的其他类来做到这一点。
【问题讨论】:
-
在将实体添加到第二个上下文之前,您不需要将它们从第一个上下文中分离出来吗?
-
我不确定。我们该怎么做?
-
在检索数据之前关闭源上下文的代理创建,例如
_t1Db.Configuration.ProxyCreationEnabled = false; var orders = _t1Db.Orders....
标签: c# asp.net-mvc database entity-framework entity-framework-6