我如何在UPSERT ADO.NET EF 4.1的记录? [英] How do I upsert a record in ADO.NET EF 4.1?

查看:202
本文介绍了我如何在UPSERT 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆