[英]EF loading related data issue
我有两个实体:
public class Album
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual int GenreId { get; set; }
public virtual int ArtistId { get; set; }
public virtual string CoverURL { get; set; }
public virtual int Cost { get; set; }
public virtual Artist Artist { get; set; }
public virtual Genre Genre { get; set; }
}
public class Genre
{
public int Id { get; set; }
public string Name { get; set; }
public virtual IEnumerable<Album> Albums{get;set;}
public int AlbumCount { get { return Albums.Count(); } }
public Genre()
{
Albums = new List<Album>();
}
}
这是控制器动作。
public ActionResult Index()
{
var genres = db.Genres.ToList();
return View(genres);
}
我在流派和专辑之间有一对多的映射关系(一个专辑只能有一个流派,但是一个流派可以属于多个专辑)。 当我尝试获取专辑详细信息(包括类型的导航属性)时,它为我提供了预期的数据。 但是当我尝试显示所有流派时,总会给我0作为专辑计数。 我怀疑有约束力的问题,但我无法找出问题所在。 如果您能协助找出问题,将不胜感激。
您必须为导航属性使用ICollection
而不是IEnumerable
:
public virtual ICollection<Album> Albums { get; set; }
(例如,请参见此答案 )
然后,您可以使用Include
方法来获取具有Genres
Albums
:
db.Genres.Include(genre => genre.Albums)
要么
db.Genres.Include("Albums")
编辑:请阅读此SO答案以获取有关集合类型的更多信息。 基本上, ICollection
继承自IEnumerable
,并允许您修改您的集合( IEnumerable
的主要目的是迭代)。
你有尝试过吗?
public ActionResult Index()
{
var genres = db.Genres.Include(x => x.Albums).ToList();
return View(genres);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.