实体框架6:克隆除ID以外的对象和关系

时间:2016-05-15 09:21:11

标签: c# entity-framework

如果我有这样的代码,请你告诉我:

using(var database = new MyDbContext()) {
MyModel myModel = database.Where(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()
}

是否添加了Rows与新ID的关系?

例如,如果我有 tbl_order 并且 tbl_order_details 中有一些子项,如果我通过上面的代码克隆它,是否会添加带有新ID的tbl_order_details行?

我在这里找到了这个解决方案:Entity Framework 6: Clone object except ID 但这里没有解释关系

2 个答案:

答案 0 :(得分:0)

此代码示例:

public void CloneOrder(int orderId)
    {
        using (var database = new MyDbContext())
        {
            Order order = db.Orders.Find(m => m.Id == orderId);
            var newOrder = new Order{
                Content = order.Content
            }

            database.Orders.Add(newOrder);

            OrderDetail orderDetail = new OrderDetail{
                OrderId = newOrder.Id,
                Content = order.OrderDetails.Content
            };
            database.OrderDetails.Add(orderDetail);
            database.SaveChanges();
        }
    }

答案 1 :(得分:0)

在您的示例中,您的新行将被添加,与原始值不同的ONLY值将是它的id列。如果它们是具有外键关系的其他列,则它们的值将完全相同(也不会自动递增)。如果添加一行,则只添加一行,后台将不会创建其他行。克隆行时,EF不会使外键值无效(除非你告诉它)