В настоящее время я работаю над приложением ASP.NET MVC, в котором контроллеры используют репозитории для доступа к данным через ORM Framework.Как правильно реализовать интерфейс в репозитории C#
Ниже приведен базовый пример интерфейсов и репозиториев, используемых моими контроллерами ASP.NET MVC для доступа к данным.
Я испытываю большое количество моих репозиториев, оставшихся в памяти GC Gen2, и я подумал, было ли это результатом моего шаблона дизайна?
Любые советы по этому вопросу будут оценены по достоинству. Я понимаю, что архитектура может быть улучшена, и такие комментарии также будут оценены, но мой основной фокус окружает мое использование высокой памяти.
Контроллер
[SessionState(SessionStateBehavior.ReadOnly)]
public class GridCustomerServiceController : Controller
{
private ICustomerServiceRepository _customerServiceRepository { get; set; }
#region Constructor
public GridCustomerServiceController()
{
_customerServiceRepository = new CustomerServiceRepository();
}
#endregion Constructor
#region Overrides
protected override void Dispose(bool disposing)
{
this._customerServiceRepository.Dispose();
base.Dispose(disposing);
}
#endregion Overrides
[GridAction]
[Authorize(Roles = "user")]
public ActionResult _CustomerServicesSelect()
{
return View(new GridModel
{
Data =
(_customerServiceRepository.GetServicesByCustomerId(1))
});
}
Интерфейс
using System.Linq;
public interface ICustomerProductRepository
{
void Dispose();
IQueryable<CustomerProduct> GetProductObjectsByCustomerId(int cid);
void Add(Customer b);
void Delete(Customer c);
void Save();
}
Репозиторий
public class CustomerProductRepository : ICustomerProductRepository
{
private myEntities db = new myEntities();
#region Dispose Methods
~CustomerProductRepository()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (db != null)
{
db.Dispose();
db = null;
}
}
#endregion Dispose Methods
public void Delete(CustomerProduct c)
{
db.CustomerProducts.DeleteObject(c);
}
public void Save()
{
db.SaveChanges();
}
public void AddCustomerProduct(CustomerProduct b)
{
db.AddToCustomerProducts(b);
db.SaveChanges();
}
...
Сделать 'ICustomerProductRepository' наследовать' IDisposable' вместо определения метода 'Dispose'. – JosephHirn