我一直在试图在我的项目中实现存储库模式。我不确定我是否正确使用配置。我从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还是有点新的。如果我的问题有点新鲜,我很抱歉。我的第一篇文章在这里。所以,我希望我没有违反任何规则:)
不确定你的意思是unitOfWork? - 在从通用存储库继承的存储库中? - 或者是别的? ) –