小编典典

如果存在则更新行否则使用实体框架插入逻辑

all

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


阅读 60

收藏
2022-07-09

共1个答案

小编典典

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

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();
2022-07-09