我如何在UPSERT ADO.NET EF 4.1的记录? [英] How do I upsert a record in ADO.NET EF 4.1?
问题描述
我试图完成很简单的东西,我无法找到如何使用实体框架4.1去做。
我要接受一个对象,然后做一个UPSERT一个控制器方法(取决于是否在数据库中存在的记录无论是插入或更新)。
我使用的是天然的关键,所以没有办法,我看我的POCO,并知道它是新的或没有。
这是我在做它,它似乎是错误的我:
[HttpPost]
公共JsonResult SaveMyEntity(myEntity所实体)
{
myContainer中DB =新myContainer中(); //的DbContext
如果(ModelState.IsValid)
{
现有VAR =
db.MyEntitys.Find(entity.MyKey);
如果(现有== NULL)
{
db.MyEntitys.Add(实体);
}
,否则
{
existing.A = entity.A;
existing.B = entity.B;
db.Entry(现有的).STATE = EntityState.Modified;
}
db.SaveChanges();
返回JSON(新{结果=成功});
}
}
在理想情况下,整个事情只会是这样的
db.MyEntities.AddOrModify(实体);
不幸的是没有办法做到这一点无需查询数据库或使用存储过程。简约的代码应该是:
公共无效AddOrModify< T>(T实体,串键),其中T:类,IEntity / /实现使用的myKey
{
(VAR背景=新myContainer中())
{
如果(context.Set< T>()任何(E => e。 ==的myKey键))
{
context.Entry(实体).STATE = EntityState.Modified;
}
,否则
{
context.Entry(实体).STATE = EntityState.Added;
}
context.SaveChanges();
}
}
I'm trying to accomplish something really simple and I can't find how to do it using Entity Framework 4.1.
I want a controller method that accepts an object and then does an UPSERT (either an insert or update depending on whether the record exists in the database).
I am using a natural key, so there's no way for me to look at my POCO and tell if it's new or not.
This is how I am doing it, and it seems wrong to me:
[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" });
}
}
Ideally, the whole thing would just be something like this:
db.MyEntities.AddOrModify(entity);
Unfortunately there is no way to do this without querying database or using stored procedure. The minimalistic code should be:
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();
}
}
这篇关于我如何在UPSERT ADO.NET EF 4.1的记录?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!