Есть ли способ вызвать команду T-Sql MERGE из .NET Entity каркас 4?
MERGE в Entity Framework
Ответы (1)
Нет такой встроенной функциональности - вы должны создать свою собственную. Очень распространенным является, например, такой подход:
public void SaveOrUpdate(MyEntity entity)
{
if (entity.Id == 0)
{
context.MyEntities.AddObject(entity);
}
else
{
context.MyEntities.Attach(entity);
context.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
}
// You can call SaveChanges here or you can call it separately after multiple changes
}
Это пример работы с отдельным объектом, который Id
автоматически генерируется в базе данных (IDENTITY
). Идентификатор по умолчанию для нового объекта всегда равен 0, поскольку при сохранении изменений будет присвоено реальное значение.
person
Ladislav Mrnka
schedule
30.04.2011
спасибо, однако. При использовании DDD и присоединении корня Aggregate с несколькими уровнями вложенности свойств потребуется выполнить некоторую форму или рекурсию. Есть ли какой-то пример этого? (Также немного озадачивает то, что команда EF ожидает, что разработчики сами справятся с этим распространенным сценарием, когда другие формы, такие как NHibernate, предлагают слияние из коробки)
- person Mickey Puri; 25.04.2014
Но что, если вы еще не знаете, существует ли объект в базе данных? Оператор
MERGE
предназначен именно для определения того, существует объект или нет, а также для обновления или вставки при необходимости.
- person Joshua Frank; 17.11.2014
Вы пропустите часть удаления.
- person Azimuth; 16.05.2017
@JoshuaFrank Вот для чего предназначен
if (entity.Id == 0)
; предположительно в базе данных идентификатор начинается с 1.
- person Tom Blodget; 24.08.2019