[英]Entity Framework 6 Self Join not populating
我有以下數據庫表:
CREATE TABLE [dbo].[QUESTIONS](
[QUESTION_ID] [int] IDENTITY(1,1) NOT NULL,
[QUESTION_TEXT] [varchar](max) NOT NULL,
[PARENT_QUESTION_ID] [int] NULL,
CONSTRAINT [PK_QUESTIONS] PRIMARY KEY CLUSTERED
(
[QUESTION_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[QUESTIONS] WITH CHECK ADD CONSTRAINT [FK_QUESTIONS_QUESTIONS] FOREIGN KEY([PARENT_QUESTION_ID])
REFERENCES [dbo].[QUESTIONS] ([QUESTION_ID])
GO
ALTER TABLE [dbo].[QUESTIONS] CHECK CONSTRAINT [FK_QUESTIONS_QUESTIONS]
GO
基本上,PARENT_QUESTION_ID是QUESTION_ID上的自我聯接。 我正在嘗試在EF 6.0 Code First中實現這一點。
在課堂上,我有:
[Serializable]
[Table("QUESTIONS")]
public class Question : BaseDomainModel, IQuestion
{
[Column("QUESTION_ID")]
public override int? Id { get; set; }
[Column("QUESTION_TEXT")]
[Required]
public string QuestionText { get; set; }
[Column("PARENT_QUESTION_ID")]
public int? ParentQuestionId { get; set; }
public virtual IQuestion Parent { get; set; }
[ForeignKey("ParentQuestionId")]
public virtual List<IQuestion> ChildQuestions { get; set; }
public Question()
{
ChildQuestions = new List<IQuestion>();
}
}
代碼會執行,但是ChildQuestions不會填充。 例如,如果我在數據庫中有此文件:
記錄24和25應該填充在問題26的ChildQuestions列表中。相反,什么也沒有出現。
這是我從存儲庫中填充問題的調用:
public IQuestion GetById(int id)
{
IQuestion question = null;
using (var db = new MainContext())
{
question = db.Questions.SingleOrDefault(a => a.Id == id);
}
return question;
}
這是我正在使用的上下文:
internal class MainContext : DbContext
{
internal MainContext() : base("name=ACME.Context") { }
public virtual DbSet<Question> Questions { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer<MainContext>(null);
base.OnModelCreating(modelBuilder);
}
}
您在錯誤的屬性上獲得了ForeignKey
屬性。 而不是在ChildQuestions
,應該在Parent
:
[ForeignKey("ParentQuestionId")]
public virtual IQuestion Parent { get; set; }
public virtual List<IQuestion> ChildQuestions { get; set; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.