gpt4 book ai didi

entity-framework - Entity Framework 和工作单元

转载 作者:行者123 更新时间:2023-12-04 17:37:58 25 4
gpt4 key购买 nike

我正在使用 EF/Repository/Unit of Work,但我很难理解一些细节。在 UnitOfWork 内部,我创建了一个新的 EF DbContext (EmmaContext),但是查看存储库内部,我将它转换为我知道是错误的,如何正确获取存储库中的上下文?也许我完全走错了路?

这是我的工作单元:

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

//Implementation
public class UnitOfWork : IUnitOfWork
{
#region Fields/Properties
private bool isDisposed = false;
public EmmaContext Context { get; set; }
#endregion

#region Constructor(s)
public UnitOfWork()
{
this.Context = new EmmaContext();
}
#endregion

#region Methods
public void Commit()
{
this.Context.SaveChanges();
}

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

private void Dispose(bool disposing)
{
isDisposed = true;
if (disposing)
{
if (this.Context != null)
this.Context.Dispose();
}
}
#endregion
}

这是存储库:
//Interface
public interface IRepository<TEntity> where TEntity : class
{
IQueryable<TEntity> Query();
void Add(TEntity entity);
void Attach(TEntity entity);
void Delete(TEntity entity);
void Save(TEntity entity);
}

//Implementation
public abstract class RepositoryBase<TEntity> : IRepository<TEntity> where TEntity : class
{
#region Fields/Properties
protected EmmaContext context;
protected DbSet<TEntity> dbSet;
#endregion

#region Constructor(s)
public RepositoryBase(IUnitOfWork unitOfWork)
{
this.context = ((UnitOfWork)unitOfWork).Context;
this.dbSet = context.Set<TEntity>();
}
#endregion

#region Methods
public void Add(TEntity entity)
{
dbSet.Add(entity);
}

public void Attach(TEntity entity)
{
dbSet.Attach(entity);
}

public void Delete(TEntity entity)
{
dbSet.Remove(entity);
}

public IQueryable<TEntity> Query()
{
return dbSet.AsQueryable();
}

public void Save(TEntity entity)
{
Attach(entity);
context.MarkModified(entity);
}
#endregion
}

最佳答案

Sam:我通常对在 ctor 中采用具体的 UnitOfWork 的具体存储库感到满意:

   public RepositoryBase(UnitOfWork unitOfWork)
{
this.context = unitOfWork.Context;
this.dbSet = context.Set<TEntity>();
}

存储库和 UoW 通常协同工作,并且需要彼此了解一点。

当然,使用这些类的代码只知道接口(interface)定义而不知 Prop 体类型。

关于entity-framework - Entity Framework 和工作单元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12166947/

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