我有两个类:
主类:
public class CCourseDetailModel
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int CourseDetailId { get; set; }
[ForeignKey("CourseOutcomes")]
public int CourseOutcomesId { get; set; }
public virtual CACourseOutcomesModel CourseOutcomes { get; set; }
}
依赖类:
public class CACourseOutcomesModel
{
[Key, ForeignKey("CourseDetail")]
public int CourseOutcomesId { get; set; }
[Required]
public virtual CCourseDetailModel CourseDetail { get; set; }
}
我有 10 个左右相似的类,一对一的关系运行良好。这是唯一给我以下错误的错误:
CACourseOutcomesModel_CourseDetail_Target: : Multiplicity is not valid in Role 'CACourseOutcomesModel_CourseDetail_Target' in relationship 'CACourseOutcomesModel_CourseDetail'. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be ''.*
知道我哪里出错了吗?请需要一双新眼睛。谢谢!
最佳答案
在一对一的关系中,一端必须是主体,另一端必须是从属,所以你不能在两边都有 FK 属性。删除主体 (CCourseDetailModel
) 和 CACourseOutcomesModel
中的 FK 属性,您不需要使用 Required
属性。使用 ForeignKey
属性,您已经告诉 EF 谁是依赖端。
在 Fluent Api 中将是:
modelBuilder.Entity<CACourseOutcomesModel>()
.HasRequired(p => p.CourseDetail)
.WithOptional(p => p.CourseOutcomes);
所以你的模型应该是这样的:
public class CCourseDetailModel
{
[Key]
//[DatabaseGenerated(DatabaseGeneratedOption.Identity)] don't need this, it's the configuration by default.
public int CourseDetailId { get; set; }
public virtual CACourseOutcomesModel CourseOutcomes { get; set; }
}
public class CACourseOutcomesModel
{
[Key, ForeignKey("CourseDetail")]
public int CourseOutcomesId { get; set; }
public virtual CCourseDetailModel CourseDetail { get; set; }
}
关于c# - EF 代码第一个 1 对 1 关系错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34599846/