C# EF CodeFirst-添加ICollection导航属性

C# EF CodeFirst-添加ICollection导航属性,c#,entity-framework,ef-code-first,C#,Entity Framework,Ef Code First,我想弄清楚,如何实现实体的导航属性。。。但我的导航属性始终为空: 我已经建立了两个实体: 实体1包含以下行: public int Id { get; set; } public ICollection<BestellterArtikel> BestellteArtikel { get; set; } 此外,我还将这一行添加到我的Overwrited OnModelCreating方法中: modelBuilder.Entity<Bestellung&

我想弄清楚,如何实现实体的导航属性。。。但我的导航属性始终为空:

我已经建立了两个实体:

实体1包含以下行:

    public int Id { get; set; }
    public ICollection<BestellterArtikel> BestellteArtikel { get; set; }
此外,我还将这一行添加到我的Overwrited OnModelCreating方法中:

    modelBuilder.Entity<Bestellung>().HasMany(e => e.BestellteArtikel).WithRequired(e => e.Bestellung);
modelBuilder.Entity();
我做错了什么?我忘了什么重要的事了吗?它一定要这么复杂吗?是否必须在覆盖方法中为每个属性添加一行?

以下是我的解决方案:

实体1:

  public virtual ICollection<BestellterArtikel> BestellteArtikel { get; set; }
编辑:

此外,您还必须修改映射:

modelBuilder.Entity<Bestellung>().HasMany(e => e.BestellteArtikel).WithRequired(e => e.BestellteArtikel );
modelBuilder.Entity();
您引用的不是BestellteArtikel属性,而是类型

您所说的“始终为空”是什么意思?
如果在尝试从DB读取空值时谈论空值,
然后记住,在查询上下文时,需要急切地加载导航属性, 或者使用EF延迟加载


阅读了解更多信息。

什么名字?如果你的意思是“虚拟”,它是一个C#关键字,在EF模型中使用它意味着延迟加载引用。等等!您的映射有问题。我编辑了我的回答否,您没有正确理解我:我有一个实体名为BestellterArtikel(注意R!),属性为“Bestellung”,还有一个实体名为BestellteArtikel(不带R!)。。。我无法像您在代码中那样重命名这些属性…;)好啊很抱歉但是,如果您不想使用延迟加载,您必须告诉EF,正如Liel所说的,无论您使用的名称如何。您是否将“虚拟”应用于模型的引用对象?是的,我使用了虚拟关键字,我想使用延迟加载:)当我使用Find(1)请求我的第一个实体时(我在请求之前在数据库中创建了一些示例实体),并将鼠标移到导航属性“BestellteArtikel”上,该属性为null,我无法展开它(无论是懒散还是急切地加载),尽管我有2-3个应该在那里的Entite.var bestellung=db.AlleBestellungen.FirstOrDefault(p=>p.Id==1);这就是我尝试做的(使用virtual关键字),所以,请阅读我的链接并将“.Include”()添加到您的查询工作中:)如果没有这些Include方法,还有机会工作吗?或者这只适用于快速加载?
  public virtual  Bestellung BestellteArtikel { get; set; }
modelBuilder.Entity<Bestellung>().HasMany(e => e.BestellteArtikel).WithRequired(e => e.BestellteArtikel );