MVC工作单元



我看到一些应用程序在上下文类中使用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/

最新更新