我看到一些应用程序在上下文类中使用ASP.NET MVC工作单元来执行事务提交的示例。
这是一个很好的做法??
public interface IUnitOfWork
{
void Commit()
}
public class DatabaseContext : DbContext, IUnitOfWork
{
public DbSet<Entity> Entity { get; set; }
public void Commit()
{
base.SaveChanges();
}
}
public class EntityRepository : IRepository<Entity>
{
private DatabaseContext _context;
public EntityRepository(DatabaseContext Context)
{
_context = Context;
}
void Insert()
{
_context.Entities.Add(Entity);
}
void Save()
{
_context.Commit();
}
}
或者更好的
public interface IUnitOfWork
{
void Commit()
}
public class DatabaseContext : DbContext
{
public DbSet<Entity> Entity { get; set; }
}
public class EntityRepository : IRepository<Entity>, IUnitOfWork
{
private DatabaseContext _context;
public EntityRepository(DatabaseContext Context)
{
_context = Context;
}
void Insert()
{
_context.Entities.Add(Entity);
}
void Commit()
{
_context.SaveChanges();
}
}
我不知道这个方法,你说什么????
这是我实现的类的一部分
public class UnitOfWork : IUnitOfWork
{
private ModelEntities _context;
public ModelEntities Context
{
get { return _context; }
set { _context = value; }
}
public UnitOfWork(ModelEntities context)
{
_context = context;
}
public void Save()
{
_context.SaveChanges();
}
public void Dispose()
{
this.Dispose(true);
}
public void Dispose(bool dispose){
_context.Dispose();
}
}
除此之外,我们还使用Factory来获得UnitOfWork 的实例
我认为您应该更改创建存储库的方式。工作单元的理念是为所有事务创建一个唯一的对象。考虑更改存储库的构造函数以接收唯一的工作单元,而不是上下文。
看看:
https://aarcoraci.wordpress.com/2017/02/15/asp-net-mvc5-entity-framework-repository-pattern-and-unit-of-work-revisited/