2013-11-19 4 views
0

Я видел несколько примеров приложений с использованием ASP.NET MVC Unit of Work в классе контекста для совершения фиксации транзакций.MVC Unit Of Work

Это хорошая практика ??

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(); 
    } 
} 

Я не знаю об этом approuch, что у сказать ????

+0

Если все, что существует в '' Commit' является base.SaveChanges() 'Я не уверен, где значение здесь. Кроме того, вы явно не реализовали это, потому что код, который у вас есть, даже не будет компилироваться. –

+0

Эй, парень, я отредактировал вопрос :) – leojnxs

ответ

0

это является частью класса, который я реализовал

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(); 
    } 
} 

В дополнение к этому, мы используем завод, чтобы получить экземпляр UnitOfWork

-1

Я думаю, что вы должны изменить, как вы создать свой хранилища. Идея единицы работы - иметь уникальный объект для всех транзакций. Рассмотрите возможность изменения конструктора ваших репозиториев для получения уникальной единицы работы, а не контекста.

Взгляните:

https://aarcoraci.wordpress.com/2017/02/15/asp-net-mvc5-entity-framework-repository-pattern-and-unit-of-work-revisited/

Смежные вопросы