当一列是外键时,如何使用Entity Framework将多行插入表中?

时间:2011-02-02 22:29:22

标签: entity-framework entity-framework-4

请帮帮我。我无处可寻。我想在插入时使用Entity框架执行此操作:

  • 1行添加到表 tParent
  • 4行添加到表 tChildren

tChildren 的列为 tParent 的FK,名为 ParentID。

我在4.0框架上。

2 个答案:

答案 0 :(得分:0)

关键是您在实体上设置了导航属性

tParent应该有一个名为tChildrens的导航属性,(可选),tChildren应该有一个名为tParent的导航属性。

多重性应为tParent 1 .. * tChildren

考虑到这一点,这应该可以解决问题:

var parent = new tParent();
var child1 = new tChild();
var child2 = new tChild();
// set properties you need, etc etc
parent.tChildrens.Add(child1);
parent.tChildrens.Add(child2);
context.SaveChanges();

EF非常聪明,可以添加父项,获取标识,然后将FK设置的子项插入到刚刚创建的标识中。

HTH。

答案 1 :(得分:0)

您必须使用循环将子项添加到父项,但需要调用一次保存更改,如下所示,例如,父项是Order,子项称为OrderItem

    public void AddOrder(OrderDto orderToAdd)
    {
        var newOrder = Order.CreateOrder(orderToAdd.OrderID, .....);  //set all other non nullable attributes
        neworder.OrderDate = orderToAdd.OrderDate;
        //set other properties
        '
        '  
        //then add the order items to the newOrder 
        //note orderToAdd.OrderItemsDto is the ChildList
        foreach (OrderItemDto o in orderToAdd.OrderItemsDto)
        {  
            var orderItem = OrderItem.CreateOrderItem(orderToAdd.OrderID, o.OrderItemID); //set all other non nullable attributes
            orderItem.OrderQuantity = o.OrderQuantity;
            //set other properties
            '  
            '    
            newOrder.OrderItems.Add(orderItem); 
        }
        context.AddToOrders(newOrder);
        context.SaveChanges();
    }