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
);