首页 >后端开发 >C++ >如何在实体框架中高效地更新或插入行?

如何在实体框架中高效地更新或插入行?

Patricia Arquette
Patricia Arquette原创
2025-01-06 18:28:45940浏览

How to Efficiently Update or Insert Rows in Entity Framework?

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

使用实体框架时,有有效的方法来实现更新行的逻辑(如果存在)存在或插入新行。

已附加对象

如果处理附加对象(从当前上下文实例加载的对象),请使用以下方法:

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

context.SaveChanges();

对象将自动跟踪更改,并且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();

此方法从数据库中获取与对象键匹配的行,并执行基于附件或添加的操作关于查询的结果。

以上是如何在实体框架中高效地更新或插入行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn