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



我使用的是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。我不相信它比带有集成测试的内存中数据库更好(并不是说我仍然不能用这样的抽象基类来做——但我对这篇文章不感兴趣)

目前的情况是,您的包装器似乎不是很有用,因为它实际上没有做什么(除非您省略了代码)。我的意思是它没有错,但如果它所做的只是保存,我就看不出有什么意义了。我认为您在这里寻找的是存储库模式,在大多数情况下,这是在EF4之上分层的一件好事。如果你在谷歌上搜索"存储库模式实体框架",你会发现很多关于如何实现该模式的例子,包括具有泛型类型(用于处理具体的EF实体类型)的完整例子等等。这是一个好的、简单的开始。

相关内容

最新更新