C# EF加载相关数据问题
我有两个实体:C# EF加载相关数据问题,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我有两个实体: 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 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>();
}
}
我在类型和专辑之间有一对多映射(一张专辑只能有一个类型,但一个类型可以属于多个专辑)。当我尝试获取唱片集详细信息(包括流派nav.property)时,它会给我预期的数据。但当我尝试显示所有类型时,它总是给我0作为专辑计数。我怀疑有约束力的问题,但我无法找出在哪里。如果您能帮助查找问题,我们将非常高兴。您尝试过这个吗
public ActionResult Index()
{
var genres = db.Genres.Include(x => x.Albums).ToList();
return View(genres);
}
对于导航属性,必须使用
ICollection
而不是IEnumerable
:
public virtual ICollection<Album> Albums { get; set; }
或
编辑:有关集合类型的更多信息,请阅读此内容。基本上,
ICollection
继承自IEnumerable
,并允许您修改您的集合(IEnumerable
的主要目的是迭代)。您尝试过这个。但它给了我语法错误。可能我使用的EF框架不支持这一点。它需要一个“字符串路径”作为参数。您尝试过使用字符串吗?如下所示:var genres=db.genres.Include(“Albums”).ToList();指定的包含路径无效。EntityType“MvcMusicStore.DAL.Genre”未声明名为“Albums”的导航属性。出现此错误。您是否正确配置了modelbuilder?类似这样的内容:modelBuilder.Entity().HasMany(x=>x.Albums)阅读更多信息:不,我还没有配置。有必要吗?谢谢。这很有效。我是MVC&EF的新手。你能帮我解释一下我的收集和我的数量吗?
public virtual ICollection<Album> Albums { get; set; }
db.Genres.Include(genre => genre.Albums)
db.Genres.Include("Albums")