InvalidOperationException:找不到实体类型<typename>。确保已将实体类型添加到模型中

时间:2019-09-03 15:46:50

标签: c# entity-framework-core npgsql

因此,我正在使用npgsql作为提供程序的Entity Framework Core中执行此项目。有一个Case类,这是我的解决方案的主要类。对于一对多关系,还有CaseCustomFieldValue类。这是他们的代码:

public class Case
{
    public int CaseId { get; set; }
    public List<CaseCustomFieldValue> CaseCustomFieldValues { get; set; }
}

public class CaseCustomFieldValue
{
    public int CaseCustomFieldValueId { get; set; }
    public string Value { get; set; }
    public int CaseId { get; set; }
    public virtual Case Case { get; set; }

}

想法是CaseCustomFieldValue将与案例一起发布/修改/删除,但是当我尝试更新CaseCustomFieldValue的值时,它不会更改。所以我将其添加到我的PUT方法中:

_context.Entry(@case.CaseCustomFieldValues).State = EntityState.Modified;

结果在上一行失败并显示错误:

  

InvalidOperationException:实体类型   找不到“ List ”。确保   实体类型已添加到模型中。

我想我做了DbContext类中所需的一切:

        modelBuilder.Entity<Case>()
            .HasMany(a => a.CaseCustomFieldValues);
        modelBuilder.Entity<Case>().ToTable("Cases");
        modelBuilder.Entity<CaseCustomFieldValue().ToTable("CaseCustomFieldValues");
        public DbSet<Case> Cases { get; set; }
        public DbSet<CaseCustomFieldValue> CaseCustomFieldValues { get; set; }

我删除了数据库,并从数据库更新中重新创建了它,但这没有帮助。

2 个答案:

答案 0 :(得分:0)

我使用不正确的方法开始跟踪模型时遇到此问题。我在模型列表中使用的是AddAsync而不是AddRangeAsync。

答案 1 :(得分:0)

只需检查您传递的对象是 DTO 还是实体,人们在添加实体时经常会感到困惑,但最终传递了 DTO。