我有两个实体:
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作为专辑计数。我怀疑是一个有约束力的问题,但我无法找到答案。如果你能帮忙找出问题,我将很高兴。
答案 0 :(得分:1)
您必须使用ICollection
代替IEnumerable
作为导航属性:
public virtual ICollection<Album> Albums { get; set; }
(例如,见SO answer)
然后,您可以使用Include
方法通过Albums
获取Genres
:
db.Genres.Include(genre => genre.Albums)
或
db.Genres.Include("Albums")
编辑:阅读此SO answer以获取有关集合类型的更多信息。基本上,ICollection
继承自IEnumerable
,并允许您修改集合(IEnumerable
的主要目的是迭代)。
答案 1 :(得分:0)
你试过这个吗?
public ActionResult Index()
{
var genres = db.Genres.Include(x => x.Albums).ToList();
return View(genres);
}