【问题标题】:Entity Framework 6 children to parent relations实体框架 6 子与父关系
【发布时间】:2013-12-20 12:20:00
【问题描述】:

简单示例:

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();

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

【问题讨论】:

  • 换一种方式试试:SomeOrder.Consignments.Add(consignment);
  • @Chris - 是的,这样一切正常。但我需要使用我提出问题的方式......

标签: .net database entity-framework


【解决方案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);     

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    相关资源
    最近更新 更多