Eri*_*ard 13 c# entity-framework-4.1
我正在尝试完成一些非常简单的事情,但我无法使用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" });
}
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,整个事情就是这样:
db.MyEntities.AddOrModify(entity);
Run Code Online (Sandbox Code Playgroud)
Lad*_*nka 21
遗憾的是,如果不查询数据库或使用存储过程,则无法执行此操作.简约代码应该是:
public void AddOrModify<T>(T entity, string key) where T : class, IEntity // Implements MyKey
{
using (var context = new MyContainer())
{
if (context.Set<T>().Any(e => e.MyKey == key))
{
context.Entry(entity).State = EntityState.Modified;
}
else
{
context.Entry(entity).State = EntityState.Added;
}
context.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)