Если я правильно понимаю ваш вопрос, вы ищете предложения о том, как правильно реализовать шаблон хранилища. Вот хорошая практика использования шаблона репозитория. Сначала вы захотите создать интерфейс для своего хранилища. Здесь вы можете определить, что может делать хранилище.
public interface IRepository<T>
{
void Add(T entity);
void Delete(T entity);
void Save();
IQueryable<T> FindAll();
}
Далее вы можете создавать отдельные репозитории. Первое, что вы хотите сделать здесь, - это создать интерфейс для чего-либо, выходящего за рамки обычного хранилища, которое вы, возможно, делаете.
public interface IMotorRenewalRepository : IRepository<MotorRenewal>
{
MotorRenewal FindMotorRenewalById(int id);
}
И этот интерфейс будет реализовывать IRepository MotorRenewal, чтобы вы получали все из IRepository и все, что вы определили в IMotorRenewalRepository. Интерфейс чаще всего используется, когда вам нужно использовать какое-то внедрение зависимости при написании поддельных объектов и модульных тестов для вашего хранилища.
Теперь напишите свой MotorRenewalRepository и внедрите IMotorRenewalRepository.
public class MotorRenewalRepository : IMotorRenewalRepository
{
MyDataContext _dataContext = new MyDataContext();
public void Add(MotorRenewal motorRenewal)
{
_dataContext.MotorRenewals.InsertOnSubmit(motorRenewal);
}
public void Delete(MotorRenewal motorRenewal)
{
_dataContext.MotorRenewals.DeleteOnSubmit(motorRenewal);
}
public void Save()
{
_dataContext.SubmitChanges();
}
public IQueryable<MotorRenewal> FindAll()
{
return _dataContext.MotorRenewals.AsQueryable();
}
public User FindMotorRenewalById(int id)
{
return _dataContext.MotorRenewals.Where(p => p.MotorRenewalDataID == id).SingleOrDefault();
}
}
Эта реализация намного проще для понимания. Обратите внимание, что вам не нужно обновление. Обновление - это просто вы извлекаете объект MotorRenewal из хранилища, редактируете его и вызываете .Save ().
Вы можете использовать переменную уровня класса для своего контекста данных, а не создавать новую каждый раз, когда вы вызываете метод в своем хранилище. MyDataContext должен исходить из модели, которую вы создали при перетаскивании классов LinqToSql из подключения к данным.