如何在ADO.NET EF 4.1中记录记录?

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)

  • 我建议您在竞争条件下对此进行压力测试(参见下面的SP建议). (2认同)