我在实体框架中的Code First中有一个表
public class Foo
{
public string A;
public string B;
}
我正在尝试更新数据库中的表Foo
Foo foo2 = new Foo
{
A = "a",
B = "b"
};
Foo foo1= db.Foo.Find(1);
foo1 = foo2;
我知道foo1 = foo2
无法正常工作,因为EF会跟踪foo1
和<。}的引用
foo1 = foo2
foo1
将获得foo2
的引用,如果我逐个为对象分配新值,则更新有效
foo1.A = foo2.A;
foo1.B = foo2.B
但是,有什么方法可以通过将数据从一个对象复制到第二个来实现这一目的吗?感谢
到目前为止,我已尝试过:Shallow Copy
public Foo Clone()
{
return (Foo)this.MemberwiseClone();
}
但仍然
foo1 = foo2.Clone();
无效
答案 0 :(得分:0)
您正在寻找深层复制/克隆。
要解决您的问题,您可以实现deep copying/cloning
对象的方式。
详情请见Deep cloning objects
或者作为一个简单的EF解决方案,您可以使用AsNoTracking()
从对象中获取属性,并将它们设置为新对象。例如:
var originalEntity = Context.MySet.AsNoTracking()
.FirstOrDefault(e => e.Id == 1);
Context.MySet.Add(originalEntity);
Context.SaveChanges();