为什么我不应该在一个小的抽象基类中封装一些实体框架设置?

时间:2012-03-14 20:16:37

标签: c# entity-framework entity-framework-4 repository

我正在使用Entity Framework 4.0,我构建了一个像这样的抽象基类

 public abstract class RepositoryBase : IDisposable
{
    protected MyContext context;

    protected RepositoryBase ()
    {
        context = new MyContext();
        context.ContextOptions.LazyLoadingEnabled = true;
        context.CommandTimeout = int.MaxValue;
    }

    public virtual int Save()
    {
        return context.SaveChanges();
    }

    public void Dispose()
    {
        context.Dispose();
    }

    ~RepositoryBase()
    {
        Dispose();
    }
}

但是我越来越紧张,因为我从来没有见过有人这样做过。我在一个Web应用程序中执行此操作并在每个请求上创建/处理我的对象(没有遇到缺少线程安全/静态变量的任何问题)

我仍然经常创建一个新的ObjectContext但是如果我有一个封装了几个实体的状态的类,则避免必须附加/分离实体。

我的问题:为什么不直接允许ObjectContext在派生类这样的类的生命周期中生效?

这些对象都没有被放入会话或类似的东西,所以这里的反模式是什么?

另外,我已经考虑过可以模拟我的ObjectContext了。我不相信它比带有集成测试的内存数据库更好(不是说我还是不能用这样的抽象基类做这个 - 但我对这篇文章不感兴趣)

1 个答案:

答案 0 :(得分:0)

现在看来你的包装似乎不是很有用,因为它确实没有用(除非你省略了代码)。我的意思是它没有任何问题,但我不会看到它的全部意义就是保存。我认为你在这里寻找的是一个存储库模式,在大多数情况下,在EF4之上进行分层是一件好事。如果你谷歌搜索“存储库模式实体框架”,你会发现很多如何实现模式的例子,包括具有泛型类型的完整示例(用于处理具体的EF实体类型)和诸如此类的东西。 This是一个很好的,简单的开始。