2016-02-05 2 views
1

Я пытаюсь реализовать шаблон репозитория в моем проекте. Я не уверен, правильно ли я использую утилиту. Я взял шаблон из курса MVA на основе сущности.Смутно об использовании утилиты в моем репозитории. EF6 MVC

Мой репозиторий

public static bool IsAwesome { get { return true; } } 

    public class Repository<T> : IDisposable where T : class 
    { 
    private ApplicationDbContext db = null; 
    protected DbSet<T> DbSet { get; set; } 

    public Repository() 
    { 
     db = new ApplicationDbContext(); 
     DbSet = db.Set<T>(); 
    } 

    public List<T> GetAll() 
    { 
     return DbSet.ToList(); 
    } 

    public T Get(int id) 
    { 
     return DbSet.Find(id); 
    } 

    public T GetWithString(string id) 
    { 
     return DbSet.Find(id); 
    } 

    public void Add(T entity) 
    { 
     DbSet.Add(entity); 
    } 

    public void Update(T entity) 
    { 
     DbSet.Attach(entity); 
     db.Entry(entity); 
    } 

    public void SaveChanges() 
    { 
     db.SaveChanges(); 
    } 


    private bool disposed = false; 

    protected virtual void Dispose(bool disposing) 
    { 
     if (!this.disposed) 
     { 
      if (disposing) 
      { 
       db.Dispose(); 
      } 
     } 
     this.disposed = true; 
    } 

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

Пример imageRepository, который наследует от хранилища

public class ImageRepository : Repository<Image> 
{ 

    public Image GetLatest(int vehicleId) 
    { 
     return DbSet.FirstOrDefault(p => p.VehicleId == vehicleId); 
    } 

    public List<Image> GetImagesByVehicleId(int vehicleId) 
    { 
     return DbSet.Where(p => p.VehicleId == vehicleId).ToList(); 
    } 

} 

Используя мой репозиторий на верхней части контроллера и размещения в нижней части моего контроллера

ImageRepository imageRepository = new ImageRepository(); 
    UserRepository userRepository = new UserRepository(); 

    protected override void Dispose(bool disposing) 
    { 
     imageRepository.Dispose(); 
     userRepository.Dispose(); 
     base.Dispose(disposing); 
    } 

Будет ли мой код обрабатывать все неуправляемые соединения и правильно их закрыть?

Заранее спасибо. Я все еще немного новичок в MVC и EF. Прошу прощения, если мой вопрос немного новичок. Мой первый пост здесь. Поэтому я надеюсь, что я не нарушал никаких правил :)

ответ

0

Добавьте свой код Dispose в UnitOfWork, Удалить из GenericRepository

private bool disposed = false; 

    protected virtual void Dispose(bool disposing) 
    { 
     if (!this.disposed) 
     { 
      if (disposing) 
      { 
       Context.Dispose(); 
      } 
     } 
     this.disposed = true; 
    } 

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

Не знаете, что вы имеете в виду с unitOfWork? - В репозитории, который наследуется от общего хранилища? - Или что-то еще?) –

0
Will

мой код ручки всех неуправляемых соединений и закрыть их правильно?

Видимо, да.

Однако вы не совсем следуете образцу. Вам не нужно подавлять финализацию, так как у вас нет финализатора в вашем классе. Читайте о proper implementation of IDisposable Pattern.

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