实体框架:如何使用多个上下文?

时间:2010-07-08 15:10:49

标签: c# visual-studio oracle multithreading entity-framework

我是EntityFramework的新手。

我的应用程序有一个上下文对象实例池(每个上下文与数据库有1个连接)。

问题在于,当我更新对象(并调用SaveChanges)时,数据会在数据库和更新上下文中更新,但是当我从其他实例中选择时,它会获取所选对象的旧数据。

示例:

让我们想象一个名为tbl的表。

该表有2列:id和data。

有1行:id = 1,data = 2.

EFContext context1 = new EFContext();

EFContext context2 = new EFContext();

var obj1 = context1.tbl.Where(a => a.id == 1);

var obj2 = context2.tbl.Where(a => a.id == 1);

obj2.data = 10;

context2.SaveChanges();

var obj3 = context1.tbl.Where(a => a.id == 1);

执行这些行后,obj3.data包含2而不是10。

我该如何解决这个问题?

每次我想访问数据库时,我都不想创建上下文实例。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为刷新你的实体应该做到这一点,如下:

//after
context2.SaveChanges();

//refresh obj1
context1.Refresh(RefreshMode.StoreWins, obj1);