Entity framework 在实体框架中的存储库类中使用DbContext
我尝试编写一个MVC n层应用程序。我在连接数据库时使用了存储库模式。在我的repository类中,我在repository类中有一个上下文变量。我不确定这种做法是否正确。这是我的密码:Entity framework 在实体框架中的存储库类中使用DbContext,entity-framework,dbcontext,unit-of-work,Entity Framework,Dbcontext,Unit Of Work,我尝试编写一个MVC n层应用程序。我在连接数据库时使用了存储库模式。在我的repository类中,我在repository类中有一个上下文变量。我不确定这种做法是否正确。这是我的密码: public class TTPDbContext : DbContext { public TTPDbContext() : base("TTPContext") { Database.SetInitializer(new DropCreateDatabaseIfMode
public class TTPDbContext : DbContext
{
public TTPDbContext() : base("TTPContext")
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<TTPDbContext>());
Database.Log = s => Debug.WriteLine(s);
Configuration.AutoDetectChangesEnabled = true;
}
public DbSet<Kisi> Kisiler { get; set; }
public DbSet<BakanlikBirim> BakanlikBirimleri { get; set; }
public DbSet<DisBirim> DisBirimler { get; set; }
public DbSet<Kullanici> Kullanicilar { get; set; }
public DbSet<Talep> Talepler { get; set; }
public DbSet<UnvanPozisyon> UnvanPozisyonlar { get; set; }
public DbSet<TalepDurum> TalepDurumlar { get; set; }
public DbSet<TalepKagidi> TalepKagidi { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("OsiTtp");
}
}
以下是存储库类:
public class TTPRepository : ITTPRepository,IDisposable
{
private IErrorHandling _errorHandling;
private TTPDbContext _context;
public TTPRepository()
{
this._errorHandling = new ErrorHandling();
this._context = new TTPDbContext();
}
// other sections has been dismissed for brevity.
public List<DisBirim> GetAllExternalInstitutions()
{
List<DisBirim> result = null;
DbSet<DisBirim> intermediaryresult = null;
try
{
result = new List<DisBirim>();
intermediaryresult = this._context.DisBirimler;
if (intermediaryresult != null)
{
foreach (DisBirim institution in intermediaryresult)
{
result.Add(institution);
}
}
}
catch (Exception Hata)
{
this.yazHata(Hata);
}
return result;
}
public void Dispose()
{
this._context.Dispose();
}
}
我不确定这是一个最佳的方法。你有什么建议吗?提前谢谢 当使用存储库模式和接口时,最佳实践是使用IoC容器将DbContext注入存储库构造函数 如果您使用的是IoC容器,那么可以控制DbContext的生存期,以确保存储库的所有实例都获得相同的上下文 你必须是像Unity,Ninject,Autofac
unity用法文档我建议阅读 而不是这个 试试这个
public TTPRepository(TTPDbContext context,ErrorHandling errorHandler)
{
this._errorHandling = errorHandler;
this._context = context;
}
这样,您的存储库就可以使用上下文和错误处理程序了。我总是建议使用IerroHandler和IDbContext之类的东西,而不是具体的类
所以你可以这样自由初始化。即使使用IoC容器,也可以控制上下文的生存期
var yourRepo = new TTPRepository(new TTPDbContext());
定义什么是最优?正如我写的,听起来你是在民意调查,这是离题的。不,我的意图不是基于意见,我想从工程的角度受到批评。我已经阅读了一些关于我的设计的文件,但是我不能理解其中的很多。这将是一个ASP.NETMVC项目,因此有许多线程可以运行此代码。此外,我认为打开到数据库的连接和TTPDbContext对象的处理可以是基于业务事务的,我的意思是,每当业务事务开始时,TTPDbContext应该被打开和打开,每当业务事务结束时,TTPDbContext应该被处理。我是说,这是一种最优性。
var yourRepo = new TTPRepository(new TTPDbContext());