Использую дженерик репозиторий в проекте и и не могу понять как реализовать редактирование модели? Использую ado.net и нигде не могу найти информацию везде ef.
public class Repository<T> : IRepository<T> where T : class, IEntity
{
protected Table<T> DataTable;
public Repository(DataContext context)
{
DataTable = context.GetTable<T>();
}
public void Delete(T entity)
{
DataTable.DeleteOnSubmit(entity);
}
public void Edit(T entity)
{
}
public void Insert(T entity)
{
DataTable.InsertOnSubmit(entity);
}
public IQueryable<T> GetAll()
{
return DataTable;
}
public T GetById(int id)
{
return DataTable.Single(e => e.Id.Equals(id));
}
public IQueryable<T> SearchFor(Expression<Func<T, bool>> predicate)
{
return DataTable.Where(predicate);
}
}
Методы DeleteOnSubmit, InsertOnSubmit на самом деле не удаляют и не вставляют данные в БД. Они лишь помечают сущности как удалённые или вставленные. А реальный запрос в БД на удаление или вставку происходит при вызове метода DataContext.SubmitChanges.
Как происходит обновление (update) в Linq to Sql. Когда свойства сущности меняют свои значения: someEntity.SomeProp = "someValue";
- эта сущность помечается как изменённая. А далее, аналогично, нужно вызвать метод SubmitChanges
- при этом в БД будет послан реальный запрос.
Следовательно, в вашем репозитории должен быть метод, обычно он зовётся Save
, который будет выполнять запрос(ы) к БД:
public void Save()
{
context.SubmitChanges();
}
Этот метод вызывайте после методов Delete
, Insert
и изменения свойств сущностей. Метод Edit
при этом не нужен.
Как вариант, можно сделать так:
public void Delete(T entity)
{
DataTable.DeleteOnSubmit(entity);
context.SubmitChanges();
}
public void Insert(T entity)
{
DataTable.InsertOnSubmit(entity);
context.SubmitChanges();
}
public void Edit() // хотя название Update тут будет лучше
{
context.SubmitChanges();
}
В этом варианте метод Save
не нужен. Но семантика Edit
выглядит плохо: совершенно неясно, что его нужно вызвать после изменения свойств сущностей.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня есть асинхронная функция, она возвращает результатИногда он мне нужен, иногда нет
Необходимо вывести индексы начала и конца последовательности дублирующихся гласных символов
Изучаю ASPNet Core и никак не могу найти, как правильно реализовать корзину с помощью этой технологии