我在这里通过代码优先方法创建了一个基于 EntityFramework 的数据库。该数据库包含两个表,它们之间存在父子关系:
Orderlists
(基于模型“订单列表”)Orders
(基于模型“订单”)
其中 Orderlists 包含ICollection<Order> Orders
应该 (!) 列出所有相关订单。由于某种原因,它没有。
控制器的 DbContext 包含两个 DbSet:
DbSet<Orderlist>
DbSet<Order>
另一方面,模型Order有两个属性(其类型在括号中):
int OrderlistId
Orderlist OrderList
在控制器中的 [HttpPost] Create方法的新Order对象中,我通过从 DbContext 中选择适当的Orderlist对象(具有正确提供/选择的 ID),设置新创建的Order的OrderlistId和Orderlist来连接此关系适当的对象并将Order添加到所选择的Orderlist的Orders集合中(如果它为 null,则创建集合)。
然后我做了一个db.SaveChages();
它应该做的事情。
当首先从模型的代码生成数据库时,关于关系,只有OrderlistId属性会在数据表中生成一个字段。Orderlist的Orders集合和Order的Orderlist属性都不会在表中生成字段。没关系,因为它仍然是一个有效的关系:Orderlist的 ID是一个 PK,并且OrderlistId值设置正确。数据表的方案也反映了外键的关系。
现在,问题是在我的应用程序的不同点处理数据时,关系没有恢复。当我从 DbContext 中选择Orders ICollection时,它始终为 空。
我的问题是:创建对象时是否应该自动填写订单 ?或者我是否必须通过迭代订单来手动填写它并将每个适当的订单手动添加到其相关的订单列表中?而且,如果我必须这样做,我必须在哪里以及如何做到这一点?ICollection
DbContext
DbSet
DbContext