Я пытаюсь выполнить что-то действительно простое, и я не могу найти, как это сделать, используя Entity Framework 4.1.
Мне нужен метод контроллера, который принимает объект, а затем выполняет UPSERT (либо вставку, либо обновление в зависимости от того, существует ли запись в базе данных).
Я использую естественный ключ, поэтому мне не нужно смотреть на мой POCO и сказать, что он новый или нет.
Вот как я это делаю, и мне кажется неправильным:
[HttpPost]
public JsonResult SaveMyEntity(MyEntity entity)
{
MyContainer db = new MyContainer(); // DbContext
if (ModelState.IsValid)
{
var existing =
db.MyEntitys.Find(entity.MyKey);
if (existing == null)
{
db.MyEntitys.Add(entity);
}
else
{
existing.A = entity.A;
existing.B = entity.B;
db.Entry(existing).State = EntityState.Modified;
}
db.SaveChanges();
return Json(new { Result = "Success" });
}
}
В идеале все это было бы примерно так:
db.MyEntities.AddOrModify(entity);