根据声明的约束,导航属性是必需的

时间:2010-10-27 08:20:36

标签: c# entity-framework .net-4.0

我首先处理代码.NET 4,我遇到了与1对1关系的问题。

简化数据库: -POccurrence   -id

-POccurrenceRiskAssessment   -OccurrenceId

在我的班级Poccurrence我有一个名为RiskAsessment的属性,类型为POccurrenceRiskAssessment。并非所有的事件都有风险评估,因此它需要可以为空。 我试过了

modelBuilder.Entity<POccurrence>().HasOptional(item => item.RiskAssessment).HasConstraint((o, r) => r.OccurrenceId == o.Id);

但是这给了我

  

导航属性   在类型上声明'RiskAssessment'   'AM.Pris.Classes.POccurrence'一直都是   配置为可选。基于   声明约束,导航   物业是必需的。要么做一些   依赖关键属性可空或   根据需要配置导航。

如果我尝试

modelBuilder.Entity<POccurrence>().HasRequired(item => item.RiskAssessment).HasConstraint((o, r) => r.OccurrenceId == o.Id);

我得到了

  

参照完整性约束   发生违规:主键   作为参考的一部分的财产   完整性约束无法更改   当依赖对象不变时   除非它被设置为   协会的主要对象。该   必须跟踪主要对象   没有标记为删除。

我不知道该怎么做。我甚至试图删除数据库中的真实关系,但似乎没有任何区别。任何的想法?我猜它是我正在寻找的第一次尝试HasOptional,但我如何让它成为nullalbe?

1 个答案:

答案 0 :(得分:0)

您是否考虑过将其转换为每种类型的表继承方案,其中POccurrenceRiskAssessment:POccurrence?这样你只需要查询POccurrenceRiskAssessment。