在我的MVVM程序中,我有一个Model类(比如MyModel
),我有一个从数据库读取数据的实例(使用实体框架)。在检索对象时,我将所有数据呈现给用户。稍后,用户将修改一些字段。
我想要的是创建相同的对象,除了它的ID
(因为该ID
是主键并自动递增)。
那么,我该如何处理这个问题呢?我不想一个接一个地复制所有字段,这不是一个健壮的方法。因为也许在未来模型可能会被修改,所以我必须在克隆方法中考虑到这一点。
那么,有没有什么很好的方法来复制对象,并且当保存到数据库中时,它的ID会再次自动递增呢?(将ID设置为null
会给我一个编译器错误,因为它的类型是int
)。
发布于 2014-09-08 18:29:51
我注意到不需要复制。显然,在向数据库添加模型的实例时(即使ID设置为数据库中已存在的实例),实体框架会在数据库中插入新行并自动递增其主键。所以这个功能已经内置到EF中了。我不知道,抱歉。
为了清楚起见,这里有一个例子:
发布于 2017-07-22 04:24:00
Lori Peterson建议在EF6中使用.AsNoTracking()执行克隆。我正在使用这个方法,并且可以确认它是有效的。您甚至可以包含子对象。
从数据集中检索一个或多个实体时,可以告诉entity Framework不要跟踪对该对象所做的任何更改,然后将该实体作为新实体添加到dataset中。使用.AsNoTracking时,上下文不知道有关现有实体的任何信息。
发布于 2015-04-09 14:36:00
使用ObjectContext时,QuantumHive提供的答案不起作用。
在这种情况下返回的错误是:
要正确克隆实体框架对象(至少在EF6.0中)是:
https://stackoverflow.com/questions/25720803
复制相似问题