一对多和递归关系 - 要设置的强制值

Ian*_*ers 5 c# entity-framework ef-code-first .net-4.5 entity-framework-6

环境

  • 框架4.5
  • 实体框架6(代码优先)

模型

描述

  • MainEntity一对多ChildEntity关系
  • ChildEntity一对多的递归ChildEntity关系

代码片段中的模型

public class MainEntity
{
    public long Id { get; set; }
    public virtual Collection<ChildEntity> ChildEntities { get; set; } 
}

public class ChildEntity
{
    public long Id { get; set; }
    public MainEntity ParentMainEntity { get; set; }
    public virtual Collection<ChildEntity> ChildEntities { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

注意:ChildEntity只有一层深的ChildEntities可以作为孩子.

问题

我能够坚持这个模型.这似乎工作正常.只有一个问题.当我存储ChildEntity具有父ChildEntity.该MainEntity_id字段为空,只有ParentChildEntityId设置.我希望始终设置MainEntity_Id字段的原因是用于性能查询.

如何强制MAINENTITY_ID字段始终在更深层次设置值?

Dab*_*rnl 0

第一的:

将外键留在 POCO 之外会给自己带来麻烦。MainEntityId向您添加属性将使您能够设置 new与 aChildEntity的关系 。ChildEntitiesMainEntity

第二:

var newChild =new ChildEntity();
parentEntity.ChildEntities.Add(newChild);
parentEntity.ParentMainEntity.ChildEntities.Add(newChild);
Run Code Online (Sandbox Code Playgroud)

应该根据您加载实体的方式以及哪些实体已附加到或将附加到 dbContext 来工作。