从规范化表中获取数据
Get data from normalized tables
我想检索数据(类别频道列表)。
这是我的模型:
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; }
}
这是我的检索数据代码:
return _entities.Set<Channel>()
.Include(x => x.CategoryChannels).Where(y => y.Name.Equals(category))
.AsEnumerable();
最后我收到一条错误消息:
A specified Include path is not valid. The EntityType
'xxx.Channel' does not declare a navigation property
with the name 'CategoryChannels'.
IEnumerable<T>
不能是用于 lazy/eager 加载的导航 属性,您必须为此使用 ICollection<T>
的实现(数组,列表, HashSet...) 或者只是 ICollection<T>
本身。
IEnumerable
默认情况下是惰性的,因为 deferred execution 这就是为什么你需要一个确保集合的本地副本的实现。
我想检索数据(类别频道列表)。
这是我的模型:
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; }
}
这是我的检索数据代码:
return _entities.Set<Channel>()
.Include(x => x.CategoryChannels).Where(y => y.Name.Equals(category))
.AsEnumerable();
最后我收到一条错误消息:
A specified Include path is not valid. The EntityType 'xxx.Channel' does not declare a navigation property with the name 'CategoryChannels'.
IEnumerable<T>
不能是用于 lazy/eager 加载的导航 属性,您必须为此使用 ICollection<T>
的实现(数组,列表, HashSet...) 或者只是 ICollection<T>
本身。
IEnumerable
默认情况下是惰性的,因为 deferred execution 这就是为什么你需要一个确保集合的本地副本的实现。