简单示例:
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();
当我保存时,没有寄售保存到数据库,并且在订单的托运集合中不可见。我怎样才能做到这一点?
答案 0 :(得分:1)
您的问题是您在这里创建货物:
Consigment consigment= new Consigment();
但是你没有做任何事情。它只是坐在那里,占用内存空间,直到你的功能超出范围。
您可能认为以下内容使实体框架上下文了解您的寄售:
consigment.Order = SomeOrder;
_context.Orders.AddOrUpdate(SomeOrder);
但这是不正确的。当然,consignment
知道SomeOrder
,但SomeOrder
对consignment
一无所知,而且您正在注册实体框架上下文。
您需要通过以下方式让EF上下文知道consignment
变量:
SomeOrder.Consignments.Add(consignment);
或者这个:
_context.Consignments.Add(consignment);