我正在使用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了。我不相信它比带有集成测试的内存数据库更好(不是说我还是不能用这样的抽象基类做这个 - 但我对这篇文章不感兴趣)
答案 0 :(得分:0)
现在看来你的包装似乎不是很有用,因为它确实没有用(除非你省略了代码)。我的意思是它没有任何问题,但我不会看到它的全部意义就是保存。我认为你在这里寻找的是一个存储库模式,在大多数情况下,在EF4之上进行分层是一件好事。如果你谷歌搜索“存储库模式实体框架”,你会发现很多如何实现模式的例子,包括具有泛型类型的完整示例(用于处理具体的EF实体类型)和诸如此类的东西。 This是一个很好的,简单的开始。