Где метод Table<T> Update?

97
07 апреля 2021, 16:30

Использую дженерик репозиторий в проекте и и не могу понять как реализовать редактирование модели? Использую 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);
    }
}
Answer 1

Методы 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 выглядит плохо: совершенно неясно, что его нужно вызвать после изменения свойств сущностей.

READ ALSO
c# try catch Вложенные

c# try catch Вложенные

Как происходит обработка блока finally, если идет конструкция

112
Как выполнить асинхронную операцию с возвращаемым результатом фоном (то есть проигнорировав результат) в C#

Как выполнить асинхронную операцию с возвращаемым результатом фоном (то есть проигнорировав результат) в C#

У меня есть асинхронная функция, она возвращает результатИногда он мне нужен, иногда нет

75
Не удается верно указать индексы дублирующихся символов в строке

Не удается верно указать индексы дублирующихся символов в строке

Необходимо вывести индексы начала и конца последовательности дублирующихся гласных символов

67
Корзина покупок в ASP.NET Core

Корзина покупок в ASP.NET Core

Изучаю ASPNet Core и никак не могу найти, как правильно реализовать корзину с помощью этой технологии

68