2016-02-05 64 views
1

我一直在试图在我的项目中实现存储库模式。我不确定我是否正确使用配置。我从MVA课程中学习了实体框架的模式。关于在我的仓库中使用dispose感到困惑。 EF6 MVC

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

} 

使用在控制器的顶部我的存储库,并在我的控制器的底部设置的

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 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
请问

我的代码处理所有非托管的连接,并关闭它们 是否正确?

显然是的。

但是,您并不完全遵循该模式。你不需要SuppressFinalize,因为你的班级中没有终结器。阅读有关proper implementation of IDisposable Pattern