温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c# - Update Row if it Exists Else Insert Logic with Entity Framework
c# entity-framework

c# - 如果存在使用 Entity framework 的其他插入逻辑,则更新行

发布于 2020-03-27 10:52:05

是否有人对使用 Entity framework 实现“如果存在更新行,否则插入行”逻辑的最有效方式提出建议?

查看更多

查看更多

提问者
Jonathan Wood
被浏览
94
Ladislav Mrnka 2011-04-06 05:29

如果您正在使用附加对象(从上下文的同一实例加载的对象),则可以简单地使用:

if (context.ObjectStateManager.GetObjectStateEntry(myEntity).State == EntityState.Detached)
{
    context.MyEntities.AddObject(myEntity);
}

// Attached object tracks modifications automatically

context.SaveChanges();

如果您可以使用有关对象键的任何知识,则可以使用以下内容:

if (myEntity.Id != 0)
{
    context.MyEntities.Attach(myEntity);
    context.ObjectStateManager.ChangeObjectState(myEntity, EntityState.Modified);
}
else
{
    context.MyEntities.AddObject(myEntity);
}

context.SaveChanges();

如果无法通过其ID来确定对象的存在,则必须执行查询查询:

var id = myEntity.Id;
if (context.MyEntities.Any(e => e.Id == id))
{
    context.MyEntities.Attach(myEntity);
    context.ObjectStateManager.ChangeObjectState(myEntity, EntityState.Modified);
}
else
{
    context.MyEntities.AddObject(myEntity);
}

context.SaveChanges();