更新2个实体实例之间的属性

本文关键字:属性 之间 实例 2个 实体 更新 | 更新日期: 2023-09-27 18:22:15

假设我有两个相同实体的实例,ab

a.SomeProp = 2;
b.SomeProp = 1;

我想用b:s属性更新a

a = b;
context.SaveChanges();

a附加到上下文,b未附加到上下文)

但是,这些值不会更新。我想我做这件事的方式不对。非常感谢您的帮助。

更新2个实体实例之间的属性

如果进行

a = b

则设置指向与b相同对象的a(并且所指向的原始对象被丢弃)。

你需要分配你想要更新的属性,比如:

a.SomeProp = b.SomeProp

要么在执行复制的实体上创建一个方法,要么创建类似于复制构造函数的东西

复制方法类似于:

a.CopyFrom(b);

其中

void CopyFrom(Entity b)
{
    a.SomeProp = b.SomeProp;
    a.SomeProp2 = b.SomeProp2;
...
}

=运算符不能执行您想要的操作。另外请注意,如果您想要重载=运算符,则不能重载该运算符。

是的。您正在将实例a替换为b,因此a和b都不会附加到上下文中。

你需要

a.SomeProp = b.SomeProp

SaveChanges在从实体框架检索的所有数据和上下文中调整的对象之间执行更新。有没有办法从上下文中得到b?对源自该上下文的对象执行同样的操作。

我还没有测试过,但您可以尝试一下。

dc.Entry(a).State = System.Data.EntityState.Detached;
dc.Entry(b).State = System.Data.EntityState.Modified;