I'm使用实体框架5和代码第一次。
我有两个域的实体问题和答案测验应用。 一个问题有几个可能的答案。 一个问题也有,应引用可能答案的一个一个正确答案。 我遇到与之间的实体一个一对多和一对一的一对一关系的组合的一些问题。 见Q1和Q2。
这是实体的代码:
public class Question
{
public virtual int Id { get; set; }
[Required]
public virtual string Text { get; set; }
[InverseProperty("Question")]
public virtual ICollection<Answer> PossibleAnswers { get; set; }
public virtual Answer CorrectAnswer { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public virtual DateTime? UpdateStamp { get; set; }
}
public class Answer
{
public virtual int Id { get; set; }
[Required]
public virtual string Text { get; set; }
[ForeignKey("QuestionId")]
public virtual Question Question { get; set; }
public virtual int QuestionId { get; set; }
}
Q1:我应该怎么做才能够在短短一个往返问题的目标和参考答案(直通财产PossibleAnswers)插入到数据库(例如,一个调用的SaveChanges环境)? 我得到当我保存的问题和答案不添加答案首先是错误:
无法确定相关的操作有效的排序。 依赖性可以存在由于外键约束,模型的要求,或存储生成的值。
为了解决这个问题,我试过用流利的API只需一个电话的objectcontexts的SaveChanges时做这一切,以获得问题的答案之前加入以下内容:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Question>()
.HasOptional(q => q.CorrectAnswer)
.WithRequired();
base.OnModelCreating(modelBuilder);
}
然而,这导致我到另一个错误:
检测到冲突的更改。 试图插入多个实体使用相同的密钥时,可能发生这种情况。
我是与Q1流畅API的方式在正确的道路上? 为什么错误信息?
Q2:当删除我知道会有一个错误,因为这个问题不能解答之前被删除,反之亦然的问题。 我该如何解决这个问题? 例如,被WillCascadeOnDelete应该是两个Question.CorrectAnswer和Question.PossibleAnswers规定?