gpt4 book ai didi

entity-framework - 工作单元、存储库和 IDisposable

转载 作者:行者123 更新时间:2023-12-04 10:53:20 26 4
gpt4 key购买 nike

我一直在考虑在我正在从事的项目中实现这些模式。 UoW 拥有数据库上下文,然后使用该上下文实例化多个存储库。我的问题是处理上下文。我见过的很多文章都将存储库作为 IDisposable,然后他们处理了上下文。这让我一直困惑不已,我是否遗漏了什么,或者(在我的情况下)应该只是处理上下文的 UoW?另外,我应该在我的存储库上实现 IDisposable 吗?

谢谢

克里斯

最佳答案

是的,工作单元应该实现 IDisposable并处理上下文,而不是存储库。

下面是一个例子:

public interface IUnitOfWork : IDisposable
{
void Commit();
}

public class EntityFrameworkUnitOfWork<TContext> : IUnitOfWork
where TContext : DbContext, new()
{
public EntityFrameworkUnitOfWork()
{
this.DbContext = new TContext();
ConfigureContext(this.DbContext);
}

protected virtual void ConfigureContext(TContext dbContext)
{
dbContext.Configuration.ProxyCreationEnabled = false;
dbContext.Configuration.LazyLoadingEnabled = false;
dbContext.Configuration.ValidateOnSaveEnabled = false;
}

protected TContext DbContext { get; private set; }

public void Commit()
{
this.DbContext.SaveChanges();
}

public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{
if (!disposing)
{
return;
}

if (this.DbContext == null)
{
return;
}

this.DbContext.Dispose();
this.DbContext = null;
}
}

关于entity-framework - 工作单元、存储库和 IDisposable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15972978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com