0
  • 我正在使用 Entity Framework 5 和 SQL Server 2008 R2。
  • 我还实现了存储库模式。
  • 这是一个桌面应用程序

我的系统运行良好,除了一个“小”细节。当两个或更多用户正在使用该应用程序时,其中一个人更改了数据,如果他不离开并重新进入该应用程序,另一个人就看不到它。我在这里得到了 Ladislav 的答案:Load changes made in another DbContext

它奏效了。唯一的问题是,对于每个集合,我想确保它已更新,我必须对其进行硬编码。

即使它有效,但我不禁想到必须有更好的方法。我不认为 Entity Framework 不知道数据库何时更改并且需要重新检索数据。

那么,我做错了什么?

到目前为止,这就是我正在做的事情:

public class MyAppContext : DbContext 
{
    //DbSet<T> declarations
}

public class Context : IDisposable
{
    private readonly MyAppContext ctx;
    private Dictionary<Type, IRepository> repositories;

    private static Context instance;

    public static Context Instance
    {
        get
        {
            if (instance == null)
                instance = new Context();

            return instance;
        }
    }
    ...
}

// and then each repository have access to the context
public abstract class Repository<T> : IRepository
    where T : class
{
    protected readonly MyAppContext ctx;
    ...
}

如您所见,我使用“单例”模式来访问上下文并避免双重上下文异常。

有任何想法吗?

4

0 回答 0