在我的 MVVM 程序中,我有一个模型类(比如 MyModel
),我从中有一个从数据库读取的实例(使用 Entity Framework )。检索对象时,我将所有数据呈现给用户。稍后用户将修改一些字段。
我想要的是创建相同的对象,除了它的 ID
(因为 ID
是主键并且自动递增).
那么我该如何处理呢?我不想一个一个地复制所有字段,这不是一个可靠的方法。因为也许将来模型可能会被修改,所以这样我就必须在克隆方法中考虑到这一点。
那么有什么优雅的方法可以复制对象并在保存到数据库时,它的 ID 再次自动递增? (将 ID 设置为 null
会给我一个编译器错误,因为它是 int
类型)。
我注意到不需要复制。显然,在向数据库添加模型实例时(即使 ID 设置为数据库中已存在的 ID),Entity Framework 会在数据库中插入一个新行并自动递增它的主键。所以这个功能已经内置到 EF 中。我不知道这个,抱歉。
为了清楚起见,这里有一个例子:
using(var database = new MyDbContext()) {
MyModel myModel = database.FirstOrDefault(m => m.SomeProperty == someValue);
myModel.SomeOtherProperty = someOtherValue; //user changed a value
database.MyModels.Add(myModel); //even though the ID of myModel exists in the database, it gets added as a new row and the ID gets auto-incremented
database.SaveChanges();
}