实体框架:更新实体或添加(如果它不存在)

wil*_*lvv 5 sql optimization entity-framework-4 sql-update

我有一个场景,我必须更新一个实体,如果它存在或添加一个新实体,如果它不存在.

我想为此执行一个单独的方法(如果它只是一次访问服务器就会很棒).

EF中有类似的东西吗?

现在我的代码看起来像这样:

var entity = db.Entities.FirstOrDefault(e => e.Id == myId);
if (entity == null)
{
    entity = db.Entities.CreateObject();
    entity.Id = myId;
}

entity.Value = "my modified value";

db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

但我想避免第一个查询,如下所示:

var entity = new Entity();
entity.Id = myId;
entity.Value = "my modified value";
db.AddOrAttach(entity);
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

有类似的东西吗?或者我必须执行第一个查询,不管是什么?

谢谢

Ada*_*son 2

不幸的是,无论如何您都必须执行第一个查询。

一种选择是编写一个执行 T-SQL 的存储过程,MERGE然后将其映射到函数导入,尽管这需要您将实体的标量值作为参数传递(并且将完成对导航属性的支持),但是它会实现你所追求的。