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)),但我应该引用类别名称。有条件地急于加载相关实体是不可能的。您要么全部获得,要么一个也得不到,但这是另一个主题:)当然,但如果我想延迟加载,这是可能的,但我正在寻找如何做到这一点