我正試圖創建一個測驗應用程式,我有兩個物體。QuestionItem和AnswerItem。
一個問題可以有多個答案(一對多的關系)。
下面是我的模型。
public class TblQuestionItem
{
//洗掉建構式以保持代碼簡短。
[Key]
public int QuestionID { get; set; }
[Required]。
public string QuestionText { get; set; }
public List<TblAnswerItem> AnswerList { get; set; }
}
public class TblAnswerItem//洗掉建構式以保持代碼簡短。
[Key]
public int AnswerID { get; set; }
[Required] 。
public string AnswerText { get; set; }
//this is required for foreign key relation .
public int FkQuestionID { get; set; }
public TblQuestionItem Question { get; set; }
下面是我的背景關系類
public class QuestionsDBContext : DbContext
{
//Constructor[/span
public QuestionsDBContext(DbContextOptions<QuestionsDBContext> options) : base(options) { }
public DbSet<TblQuestionItem> TblQuestions { get; set; }
public DbSet<TblAnswerItem> TblAnswers { get; set; }
//Seed initial data; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder)。
//配置一對多的關系。
builder.Entity<TblAnswerItem>()
.HasOne(c => c.Question)
.WithMany(e => e.AnswerList)
.HasForeignKey(p => p.FkQuestionID)
.OnDelete(DeleteBehavior.Cascade)。
//Seed資料
TblQuestionItem Question1 = new TblQuestionItem(1, "誰是SpaceX的CEO?")。
TblAnswerItem Answer1 = new TblAnswerItem(1, "Jeff Bezos", 1, Question1) 。
TblAnswerItem Answer2 = new TblAnswerItem(2, "Elon Musk", 1, Question1);
TblAnswerItem Answer3 = new TblAnswerItem(3, "Bill Gates", 1, Question1) 。
TblAnswerItem Answer4 = new TblAnswerItem(4, "Sundar Pichai" , 1, Question1)。
Question1.AnswerList.Add(Answer1)。
Question1.AnswerList.Add(Answer2);
Question1.AnswerList.Add(Answer3);
Question1.AnswerList.Add(Answer4)。
builder.Entity<TblQuestionItem>().HasData(Question1);
builder.Entity<TblAnswerItem>().HasData(Answer1);
builder.Entity<TblAnswerItem>().HasData(Answer2);
builder.Entity<TblAnswerItem>().HasData(Answer3);
builder.Entity<TblAnswerItem>().HasData(Answer4)。
}
}
現在當我運行遷移時,我的期望是代碼將創建一個資料庫和其中的兩個表,以及初始資料。
種子物體for物體型別'TblAnswerItem'不能被添加,因為它有
導航'Question' set。為了種子關系,添加物體種子到'TblAnswerItem'。
和指定外鍵值{'QuestionID'}。
考慮使用 'DbContextOptionsBuilder.EnableSensitiveDataLogging'以查看相關的
屬性值。
我嘗試了提到的這里的解決方案,但沒有幫助。我在這里做錯了什么?
uj5u.com熱心網友回復:
我建議為你的默認資料定義一個類,這樣更容易理解。
首先我定義了這個 :
public static class DefaultData
{
public static readonly List<TblQuestionItem> Questions = new List<TblQuestionItem>
{
new TblQuestionItem(1, "誰是SpaceX的CEO?")
};
public static readonly IEnumerable<TblAnswerItem> Answers = new TblAnswerItem[] 。
{
new TblAnswerItem(1, "Jeff Bezos"/span>, 1)。
new TblAnswerItem(2, "Elon Musk", 1) 。
new TblAnswerItem(3, "Bill Gates", 1) 。
new TblAnswerItem(4, "Sundar Pichai", 1)
};
}
和OnModelCreating方法你[MOST]只需要像這樣的呼叫
// seed data
builder.Entity<TblQuestionItem>().HasData(DefaultData.Questions)。
builder.Entity<TblAnswerItem>().HasData(DefaultData.Answers)。
uj5u.com熱心網友回復:
做以下修改,它應該可以作業:
洗掉以下代碼(不需要填充導航屬性):
Question1.AnswerList.Add(Answer1); Question1.AnswerList.Add(Answer2); Question1.AnswerList.Add(Answer3); Question1.AnswerList.Add(Answer4); _/code>
從 TblAnswerItem 建構式中洗掉 Question1 引數。與第1項的推理相同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/309863.html
標籤:
上一篇:當不同的表共享相同的欄位時,如何設計EF核心代碼優先的資料庫?
下一篇:試圖將資料從資料庫回傳到控制器,得到"如果你使用DataContractSerializer,請考慮使用DataContractResolver"的錯誤。
