Entity framework EntityFramework多对多获取链接

Entity framework EntityFramework多对多获取链接,entity-framework,entity-framework-migrations,Entity Framework,Entity Framework Migrations,我有以下型号: public class Step { [Key] public int Id { get; set; } [Required] public String Name { get; set; } public Workflow Workflow { get; set; } public List<StepOption> Options{ get; set; } internal StepDto toDto()

我有以下型号:

public class Step {
    [Key]
    public int Id { get; set; }
    [Required]
    public String Name { get; set; }

    public Workflow Workflow { get; set; }
    public List<StepOption> Options{ get; set; }

    internal StepDto toDto() {
        return new StepDto {
            Id = this.Id, 
            Name = this.Name,
        };
    }
}
数据库中现在有3列:

台阶 步骤选项 步骤选项步骤
但是现在我想知道如何从Steps对象访问StepOptions,它总是空的,尽管在DB中StepOptions Steps链接正确

您需要为Step类中的Options属性使用虚拟修饰符。这样,延迟加载机制可以正常工作。否则,您需要使用Include将Step选项与Step一起加载。@appect是的,这是正确的,您想将其作为答案发布,以便我可以标记它吗?我很高兴它有帮助,但我不想添加答案,这真的很琐碎。如果你愿意,你可以删除你的问题,但是把问题保留在这里也可以。如果搜索者注意到这些评论,它们总是很有用的。
public class StepOption {
    [Key]
    public int Id { get; set; }
    [Required]
    public String Name { get; set; }

    public List<Step> Steps { get; set; }
}
var workflow = new Workflow {Id = 1,  Name = "Some Workflow" };

context.Workflows.AddOrUpdate(w => w.Name, workflow);

var accept = new StepOption { Id = 1 ,Name = "Accept" };
var reject = new StepOption {Id = 2, Name = "Reject" };
var advies = new StepOption {Id = 3, Name = "Advies" };
context.StepOptions.AddOrUpdate(x => x.Name, accept, reject, advies);

var step1 = new Step {Id = 1, Name = "Start", Workflow = workflow, Options = new List<StepOption> { accept } };
var step2 = new Step { Id = 2, Name = "Validatie Bouwheer", Workflow = workflow, Options = new List<StepOption> { accept, reject } };
var step3 = new Step { Id = 3, Name = "Controlling1", Workflow = workflow };
var step4 = new Step { Id = 4, Name = "Adviezen", Workflow = workflow };
var step5 = new Step {Id = 5, Name = "Ondersteuning", Workflow = workflow };
var step6 = new Step { Id = 6, Name = "Directie", Workflow = workflow };
var step7 = new Step { Id = 7, Name = "Controlling2", Workflow = workflow };
var step8 = new Step { Id = 8, Name = "Reject", Workflow = workflow };
var step9 = new Step { Id = 9, Name = "Finish", Workflow = workflow };
context.Steps.AddOrUpdate(s => s.Id,
    step1, step2, step3, step4, step5, step6, step7, step8, step9
);