【问题标题】:EF Core can't include children in parentEF Core 不能在父级中包含子级
【发布时间】:2021-03-18 19:51:34
【问题描述】:

我对 EF Core 很陌生。

在我的数据库环境中:

// STEP
modelBuilder.Entity<CorsoStepS>().HasKey(x => new { x.codCorso, x.codStep });
modelBuilder.Entity<CorsoStepS>()
    .HasMany(step => step.CorsoStepLezioni)
    .WithOne(lez => lez.CorsoStep)
    .HasForeignKey(lez => new { lez.codCorso, lez.codStep });
modelBuilder.Entity<CorsoStepS>().Ignore(step => step.CorsoStepLezioni);
////

// LEZIONI
modelBuilder.Entity<CorsoStepLezione>().HasKey(x => new { x.codCorso, x.codStep, x.codLezione });
modelBuilder.Entity<CorsoStepLezione>()
    .HasMany(lez => lez.Sessioni)
    .WithOne(sess => sess.Lezione)
    .HasForeignKey(sess => new { sess.codCorso, sess.codStep, sess.codLezione });
modelBuilder.Entity<CorsoStepLezione>().Ignore(lez => lez.Sessioni);
////

// SESSIONI
modelBuilder.Entity<CorsoStepLezioneSessione>().HasKey(x => new { x.codCorso, x.codStep, x.codLezione, x.codSessione });
modelBuilder.Entity<CorsoStepLezioneSessione>()
    .HasMany(sess => sess.Iscrizioni)
    .WithOne(iscr => iscr.Sessione)
    .HasForeignKey(iscr => new { iscr.CodCorso, iscr.CodStep, iscr.CodLezione, iscr.CodSessione });
modelBuilder.Entity<CorsoStepLezioneSessione>().Ignore(sess => sess.Iscrizioni);
////

我的实体:

public class CorsoStepS
    {
        public int codCorso { get; set; }
        public int codStep { get; set; }
        public string nome { get; set; }
        public int maxPartecipanti { get; set; }
        public int order { get; set; }

        public virtual Corso Corso { get; set; }
        public virtual ICollection<CorsoStepLezione> CorsoStepLezioni { get; set; }
    }

public class CorsoStepLezione
    {
        public int codCorso { get; set; }
        public int codStep { get; set; }
        public int codLezione { get; set; }
        public string nome { get; set; }


        public CorsoStepS CorsoStep { get; set; }
        public virtual ICollection<CorsoStepLezioneSessione> Sessioni { get; set; }
    }

public class CorsoStepLezioneSessione
    {
        public int codCorso { get; set; }
        public int codStep { get; set; }
        public int codLezione { get; set; }
        public int codSessione { get; set; }
        public DateTime? data { get; set; }
        public string ora { get; set; }
        public int maxPartecipanti { get; set; }

        public virtual CorsoStepLezione Lezione { get; set; }
        public virtual ICollection<CorsoStepLezioniSessioniIscrizione> Iscrizioni { get; set; }
    }

当我打电话时:

var lezioniCorso = _clienteContext.CorsoStepLezioni
                .Include(lezione => lezione.Sessioni);

它给了我: 表达式“lezione.Sessioni”在“包含”操作中无效,因为它不代表属性访问:“t => t.MyProperty”。

但如果我打电话:

var lezioniCorso = _clienteContext.CorsoStepLezioni
                .Include(lezione => lezione.CorsoStep);

没关系。

我做错了什么?我要傻了

【问题讨论】:

  • 为什么会有这些Ignore 声明?目前尚不清楚您要在这里实现什么。

标签: entity-framework entity-framework-core


【解决方案1】:

正是因为这条线

modelBuilder.Entity&lt;CorsoStepLezione&gt;().Ignore(lez =&gt; lez.Sessioni);

首先您告诉 EF 建立关系,然后立即再次忽略它,因此 EF 的行为就像此属性不存在一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 2012-07-17
    • 2013-05-29
    相关资源
    最近更新 更多