c# - 如果行存在则更新行否则使用 Entity Framework 插入逻辑

标签 c# entity-framework

<分区>

使用 Entity Framework 实现更新行(如果存在),否则插入新行逻辑的最有效方法是什么?或者有什么模式吗?

最佳答案

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

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();

关于c# - 如果行存在则更新行否则使用 Entity Framework 插入逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5557829/

相关文章:

c# - 升级到 inProcess 后,我在双斜杠上得到了 404

c# - 为什么我的 ASP.NET 部署服务器不使用配置的环境名称?

entity-framework - Azure EF Code First 迁移初始化程序

c# - Entity Framework : Get Inherited Types directly through Context

c# - VS 错误 : The value for column 'IsPrimaryKey' in table 'TableDetails' is DBNull

c# - 我如何将一个简单的表达式附加到 IQueryable

c# - 设置 Backgroundworker MVVM,更新 Progressbar

c# - 鼠标移动太快无法捕获事件

C# 判断表单是否最大化

c# - 当 UserLogin 存在时,ExternalLoginSignInAsync 返回失败响应