我正在使用实体框架4从DB创建实体。
我有2个实体上下文连接到db。 让我们说context1和context2
但是,当我执行以下步骤时, 1.从context1获取数据 2.从context2获取相同的数据行 3.将相同的数据行更新为context1 4.从context2获取相同的数据行
在步骤3中更新后,context2不会改变。
我猜context2缓存了数据。每次都不从db获取数据。
如何解决?
感谢〜
答案 0 :(得分:5)
实体上下文只从数据库中获取数据,然后将其缓存在内存中。
要从数据库获取数据,首先要在Context1上调用SaveChanges()
。然后,调用Refresh(RefreshMode.StoreWins, Context2.EntityToRefresh)
以获取context2中的数据库值。
您还可以使用“共享/静态”上下文来执行查询,因为您可以确保所有查询都有相同的数据。
你可以像这样实现它
public class SharedObjectContext
{
private readonly WestwindEntities context;
#region Singleton Pattern
// Static members are lazily initialized.
// .NET guarantees thread safety for static initialization.
private static readonly SharedObjectContext instance = new SharedObjectContext();
// Make the constructor private to hide it.
// This class adheres to the singleton pattern.
private SharedObjectContext()
{
// Create the ObjectContext.
context = new WestwindEntities();
}
// Return the single instance of the ClientSessionManager type.
public static SharedObjectContext Instance
{
get
{
return instance;
}
}
#endregion
public WestwindEntities Context
{
get
{
return context;
}
}
}
答案 1 :(得分:0)
您必须致电SaveChanges()
,然后保存更改(返回数据库)。
此外,如果您已经枚举了步骤2中的集合,那么即使您将更改保存回数据库,也不会从步骤3获得更新。