更新2个实体实例之间的属性
本文关键字:属性 之间 实例 2个 实体 更新 | 更新日期: 2023-09-27 18:22:15
假设我有两个相同实体的实例,a
和b
a.SomeProp = 2;
b.SomeProp = 1;
我想用b
:s属性更新a
:
a = b;
context.SaveChanges();
(a
附加到上下文,b
未附加到上下文)
但是,这些值不会更新。我想我做这件事的方式不对。非常感谢您的帮助。
如果进行
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;