【发布时间】:2014-09-26 03:12:48
【问题描述】:
环境
- 框架 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; }
}
注意:一个 ChildEntity 只能再深一层 ChildEntities 作为 childeren。
问题
我能够坚持这个模型。这似乎工作正常。只有一个问题。当我存储具有父 ChildEntity 的 ChildEntity 时。 MainEntity_id 字段为 NULL,仅设置了 ParentChildEntityId。我希望始终设置 MainEntity_Id 字段的原因是用于性能查询。
如何强制 MAINENTITY_ID 字段始终在更深层次设置一个值?
【问题讨论】:
-
为什么不设置为
[Required]并使用对父ChildEntity的引用来检索其MainEntityid,如果您为所有子实体执行此操作,则始终设置。 -
我尝试了这个想法,添加了对父 ChildEntity 的引用。存储方式与以前相同。当我在 ParentMainEntity 上附加 [Required] 标记时,我偶然发现 System.Data.Entity.Validation.DbEntityValidationException 出现“一个或多个实体的验证失败。有关详细信息,请参阅'EntityValidationErrors'属性。”作为消息。没有进一步的英特尔或堆栈跟踪可用于检查该问题。 @Stefan
-
好吧,验证异常是意料之中的。您需要一些机制来设置
ParentMainEntity,最好是在您首先创建对象时。 -
顺便说一句,如果您需要某种方式从验证异常中获取一些有用的信息,请查看这篇文章:stackoverflow.com/questions/15820505/…
-
但我 100% 确定 ParentMainEntity 正在被设置,我很生气,并通过单步调试来仔细检查设置的引用。我会看看你的链接@Stefan
标签: c# entity-framework ef-code-first .net-4.5 entity-framework-6