实体框架6孩子与父母的关系

时间:2013-12-20 12:20:00

标签: .net database entity-framework

简单示例:

public class Order
{
        public int OrderId { get; set; }

        [MaxLength(128)]
        public string OrderNo { get; set; }

        public virtual List<Consigment> Consignments { get; set; }
}

public class Consigment
{
        [Key]
        public int ConsigmentId { get; set; }

        public Guid Identifier { get; set; }

        public int OrderId { get; set; }

        public virtual Order Order { get; set; }
}

现在,我想做什么:

[...]
Order SomeOrder = GetOrdersBlahBlah();
Consigment consigment= new Consigment();
consigment.Identifier = Guid.NewGuid();
consigment.Order = SomeOrder;
_context.Orders.AddOrUpdate(SomeOrder);
_context.SaveChanges();

当我保存时,没有寄售保存到数据库,并且在订单的托运集合中不可见。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

您的问题是您在这里创建货物:

Consigment consigment= new Consigment();

但是你没有做任何事情。它只是坐在那里,占用内存空间,直到你的功能超出范围。

您可能认为以下内容使实体框架上下文了解您的寄售:

 consigment.Order = SomeOrder;
 _context.Orders.AddOrUpdate(SomeOrder);

但这是不正确的。当然,consignment知道SomeOrder,但SomeOrderconsignment一无所知,而且您正在注册实体框架上下文。

您需要通过以下方式让EF上下文知道consignment变量:

 SomeOrder.Consignments.Add(consignment);

或者这个:

 _context.Consignments.Add(consignment);