【发布时间】:2015-10-10 01:51:01
【问题描述】:
我是 Entity Framework 的新手,在尝试实现我的 ERD Code First 时遇到了一些问题。情况如下:
一个产品有一组问题(QuestionGroup)。一个 QuestionGroup 有多个问题,可以属于多个 Questionaires。问卷基本上有一个问题组和一个问题顺序。 questionorder 应该保持问题在该问卷中的位置。 Questionaire 表是必需的,因为一个 QuestionGroup 可以有多个 questionorder,并且一个 questionorder 可以属于多个 questiongroup。
因为我正在尽力保持这篇文章简洁,所以我不会发布我所有的课程,除非你要求查看它们。我制作的实体类如下所示:
public class Question
{
[Key]
public int Id { get; set; }
[MaxLength(2000)]
[Required]
public string Text { get; set; }
public Answer Answer { get; set; }
public QuestionType Type { get; set; }
public ICollection<QuestionAnswerOption> Options { get; set; }
public ICollection<QuestionOrder> Orders { get; set; }
[ForeignKey("FollowupQuestion")]
public int QuestionId { get; set; }
public virtual Question FollowupQuestion { get; set; }
[ForeignKey("Questiongroup")]
public int QuestionGroupId { get; set; }
public virtual QuestionGroup Questiongroup { get; set; }
}
public class QuestionOrder
{
[Key]
public int Id { get; set; }
public int Position { get; set; }
[ForeignKey("Question")]
[Required]
public int QuestionId { get; set; }
public virtual Question Question { get; set; }
[ForeignKey("Questionaire")]
[Required]
public int QuestionaireId { get; set; }
public virtual Questionaire Questionaire { get; set; }
}
public class Product
{
[Key]
public int Id { get; set; }
[MaxLength(150)]
[Required]
[Index(IsUnique = true)]
public string Name { get; set; }
[MaxLength(500)]
public string Summary { get; set; }
[MaxLength(500)]
public string Examples { get; set; }
public virtual QuestionGroup QuestionGroup { get; set; }
}
public class QuestionGroup
{
[Key]
public int Id { get; set; }
public ICollection<Question> Questions { get; set; }
[ForeignKey("Product")]
public int ProductId { get; set; }
public virtual Product Product { get; set; }
}
public class Questionaire
{
[Key]
public int Id { get; set; }
public QuestionGroup Group { get; set; }
public QuestionOrder Order { get; set; }
}
我得到的错误如下所示:
QuestionGroup_Product_Source::多重性在关系“QuestionGroup_Product”中的角色“QuestionGroup_Product_Source”中无效。由于 Dependent Role 属性不是关键属性,因此 Dependent Role 多重性的上限必须为“*”。
QuestionOrder_Questionaire_Source::多重性在关系“QuestionOrder_Questionaire”中的角色“QuestionOrder_Questionaire_Source”中无效。由于 Dependent Role 属性不是关键属性,因此 Dependent Role 多重性的上限必须为“*”。
QuestionType_Question_Source::多重性在关系“QuestionType_Question”中的角色“QuestionType_Question_Source”中无效。由于 Dependent Role 属性不是关键属性,因此 Dependent Role 多重性的上限必须为“*”。
我们在这里遇到的问题是: 这里有人知道修复我的表之间关系的方法吗?也许我的 ERD 也需要一些改进,但我认为问题在于我的 Code First 实现缺少一些东西。
【问题讨论】:
-
您还有其他实体配置吗?例如,使用 Fluent API?
-
不,我没有。我不确定它是如何工作的。
-
缺少产品和问卷的定义。不是 100% 肯定,但它可能会令人窒息,因为您的 FK 属性名称与 Key 属性名称不同。我知道这看起来很傻,但是将 Question 中的 Id 重命名为 QuestionId 并查看是否有任何错误消失。如果是这样,您知道这可能是问题的一部分。至于怎么处理FollowupQuestion,我不知道EF是怎么处理的。
-
将问题中的 ID 重命名为 QuestionId,没有解决任何问题
标签: c# entity-framework table-relationships multiplicity