C# 从规范化表中获取数据

C# 从规范化表中获取数据,c#,.net,asp.net-mvc,entity-framework,entity,C#,.net,Asp.net Mvc,Entity Framework,Entity,我想检索数据(类别的频道列表) 这是我的模型: public class Category : AuditableEntity<int> { public string Name { get; set; } public virtual IEnumerable<CategoryChannel> CategoryChannels { get; set; } } public class CategoryChannel : Entity<int>

我想检索数据(类别的频道列表)

这是我的模型:

public class Category : AuditableEntity<int>
{
    public string Name { get; set; }

    public virtual IEnumerable<CategoryChannel> CategoryChannels { get; set; }
}

public class CategoryChannel : Entity<int>
{
    [Display(Name = "Channel")]
    public string ChannelId { get; set; }

    [ForeignKey("ChannelId")]
    public virtual Channel Channel { get; set; }

    [Display(Name = "Category")]
    public int CategoryId { get; set; }

    [ForeignKey("CategoryId")]
    public virtual Category Category { get; set; }
}

public class Channel : AuditableEntity<string>
{
    public string Name { get; set; }

    public virtual IEnumerable<CategoryChannel> CategoryChannels { get; set; } 
}
公共类类别:AuditableEntity
{
公共字符串名称{get;set;}
公共虚拟IEnumerable CategoryChannel{get;set;}
}
公共类类别通道:实体
{
[显示(Name=“频道”)]
公共字符串ChannelId{get;set;}
[外键(“频道ID”)]
公共虚拟通道通道{get;set;}
[显示(Name=“Category”)]
public int CategoryId{get;set;}
[外国钥匙(“类别”)]
公共虚拟类别{get;set;}
}
公共类频道:AuditableEntity
{
公共字符串名称{get;set;}
公共虚拟IEnumerable CategoryChannel{get;set;}
}
这是我检索数据的代码:

    return _entities.Set<Channel>()
        .Include(x => x.CategoryChannels).Where(y => y.Name.Equals(category))
        .AsEnumerable();
return\u entities.Set()
.Include(x=>x.categoryChannel)。其中(y=>y.Name.Equals(category))
.AsEnumerable();
最后我得到一条错误信息:

指定的包含路径无效。实体类型 “xxx.Channel”未声明导航属性 名称为“CategoryChannel”

IEnumerable
不能是用于延迟/急切加载的导航属性,您必须使用
ICollection
的实现(数组、列表、哈希集…)或只是
ICollection
本身


默认情况下,
IEnumerable
是惰性的,因为这就是为什么您需要一个实现来确保集合的本地副本。

我已经更改了列表的代码,但现在我得到了空列表(应该是2)您保持列表为虚拟的,对吗?EF可能希望您的模型实例化列表(对此不完全确定)。尝试将构造函数添加到
频道
公共频道(){CategoryChannel=new List();}
是的,但我发现了另一个问题。我重构了通道名称(“Where(y=>y.Name.Equals(category)),但我应该引用类别名称。有条件地急于加载相关实体是不可能的。您要么全部获得,要么一个也得不到,但这是另一个主题:)当然,但如果我想延迟加载,这是可能的,但我正在寻找如何做到这一点