Проблема в том, что я пытаюсь найти единственный способ сохранить объект, будь то новый объект или уже загруженный объект. Большинство примеров кода разделяют методы Add и Save, что противоречит многим другим текущим схемам использования одного метода Save ().
Позвольте мне заявить, что я прочитал другие посты. Я также посмотрел блог команды по шаблону репозитория, в котором есть единственный метод AddObject (), который я не могу найти, предполагая, что это просто Add (объект).
Если мы загружаем объект и сохраняем его, контекст знает об этом.
Новый объект, который мы ДОЛЖНЫ добавить.
Если мы добавим существующий объект - он отправит его как вставку.
Я хочу одну процедуру сохранения здесь. Пользователь не должен знать, чтобы вызвать Add или Update, достаточно Save (). С учетом вышесказанного, какой лучший маршрут здесь для единственного решения по сохранению, которое охватывает тот же метод (только сохранение, а не загрузка):
1. загрузка объекта, сохранение обратно в БД.
2. Создание нового объекта, сохранение его в БД.
Поэтому я ищу реализацию, которая во всех случаях может быть
ICustomerRepository.Save(Customer customer)
Какое решение вы бы использовали, который работает?
Мне кажется, что следующий код в методе Save (entity) работает для меня
//If the primary key is empty, its a new record
if (order.OrderId == 0)
{
_context.Orders.Add(order);
}
if (_context.Entry(order).State == System.Data.EntityState.Detached)
{
//Need to set modified so any detached entities are updated otherwise they won't be sent across to the db. Since it would've been outside the context, change tracking wouldn't have occurred anyways so we have no idea about its state - save it!
_context.Orders.Attach(order);
_context.Entry(order).State = System.Data.EntityState.Modified;
}
Хотя здесь проблема заключается в реализации универсального репозитория, здесь нет ясного способа без запроса значения ключа и проверки его значения с помощью отражения, которое не является чистым.