如何设计使用EF访问相同实时数据的多个存储库?

yar*_*lty 2 c# entity-framework irepository dbcontext

我实际上正在寻找一些帮助来学习设计多个存储库的绳索,这些存储库将使用EF访问同一个数据库.我看过示例代码,其中每个存储库都有自己的私有DBContext,但我对此概念有困难.我对这个项目中的通用接口不感兴趣.

我想要一个Identity基于(授权)的多个接口和其他作业特定的存储库,例如单个应用程序中的类别,项目等,其中继承的接口是可重用的,因此是多个DbContext实例.

在SQL中,您有可以提交或回滚事务的事务,因此在EF中,多个repos会访问相同的(实时)数据吗?也许更好的问题是当我想要一个应用程序继承许多特定于作业的存储库时,我应该如何设计我的DAL.

什么jgauffin的意思是, "确保你的库是100%完全抽象化"

这是什么意思?

这是我想弄清楚的一个简单例子.这种做法合理吗?

public class OneRepo: IRepository, IDisposable
{

private DbContext context = new DbContext();

// Methods and whatnot... 

}
Run Code Online (Sandbox Code Playgroud)

然后第二个存储库也需要OneRepo使用相同的数据库连接,但我认为它具有单独的内存单元吗?

public class AnotherRepo: IRepository, IDisposable
{

private DbContext context = new DbContext();

// Methods and whatnot...     
}
Run Code Online (Sandbox Code Playgroud)

如果我的问题写得不好,我道歉.我实际上发帖比较新,我不确定自己是否清楚自己.我已经决定我不喜欢通用的repos,并且希望使用Role Interface模式基于授权和/或用户任务创建repos.任何帮助解释将不胜感激!

Wik*_*hla 6

您将数据上下文注入到存储库中

public class FirstRepo
{ 
   DbContext _ctx;

   public FirstRepo( DbContext ctx )
   { 
       this._ctx = ctx;
   }
}

public class AnotherRepo
{ 
   DbContext _ctx;

   public AnotherRepo( DbContext ctx )
   { 
       this._ctx = ctx;
   }
}
Run Code Online (Sandbox Code Playgroud)

这样,您可以将相同的上下文传递给同一工作单元下的所有存储库.