簡體   English   中英

實體框架6自連接未填充

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM