EF7中的多对多关系 - 选择包含相关数据的列表的查询

时间:2016-02-02 10:42:52

标签: c# entity-framework asp.net-core asp.net-core-mvc entity-framework-core

我正在构建一个博客,内容上有以下多对多关系 - >类别表。我使用以下代码在EF7中生成表:

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Categorization> Categorization { get; set; }
}

public class Categorization
{
    public int ContentId { get; set; }
    public Content Content { get; set; }

    public int CategoryId { get; set; }
    public Category Category { get; set; }
}

public class Content
{
    [Key]
    public int Id { get; set; }
    public string Title { get; set; }
    public string Excerpt { get; set; }
    public string Body { get; set; }

    ...

    public virtual ICollection<Categorization> Categorization { get; set; }
}

但是,当我尝试加载类别列表(包括与EF7查询相关的内容)时,我收到错误。

categories = await _db.Categories
                      .Include(c => c.Categorization)
                      .ThenInclude(c => c.Content)
                      .OrderByDescending(c => c.Categorization.Count)
                      .ToListAsync();

这是我调用此错误时的错误页面。

  

处理请求时数据库操作失败。

     

AggregateException:发生了一个或多个错误。 AggregateException:   发生了一个或多个错误。 AggregateException:一个或多个错误   发生了。 AggregateException:发生一个或多个错误。   SqlException:列名'Id'无效。有待定模型   ApplicationDbContext的更改为这些更改支持新的迁移   更改并从命令行将它们应用于数据库:

dnx ef migrations add [migration name] 
dnx ef database update

有趣的说明:当我删除该行

 .Include(c => c.Categorization).ThenInclude(c => c.Content)

它有时会正常工作,就像加载分类一样,但这并不总是会发生,有时分类不会加载,我在生成的可枚举中的每个Category类中只有分类的空引用。

1 个答案:

答案 0 :(得分:0)

错误消息说明了一切。 SqlException:列名'Id'无效

您的数据库与项目中的模型不同。如果启用了数据库迁移,则运行命令

dnx ef migrations add [migration name] 
dnx ef database update

如果您不想使用数据库迁移,则必须更新数据库中的模型以匹配您的模型。