我正在尝试从dbContext获取数据并将其保存到其他dbContext。 实际上,我想从数据库A导入一些数据库并将其存储到数据库B.我知道还有其他方法可以做到这一点,但我想使用带有两个DBContexts的EF。
以下是该方案:
我要使用名称为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的多个实例无法引用实体对象。
请注意:我要将save Order类用于其他上下文。我知道我们可以通过为每个上下文创建不同的其他类来实现这一点。
答案 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();