繁体   English   中英

EF加载相关数据问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM