EF更新表

时间:2016-05-10 09:26:02

标签: c# entity-framework

我在实体框架中的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();

无效

1 个答案:

答案 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();

此处的说明:Entity Framework 5 deep copy/clone of an entity