我的项目中有两种不同的模型:电影和演员。电影有演员列表,演员有电影列表。我想做的是给一部电影,让所有的演员,然后为每个演员检查他们的电影。
因此,为了获取信息,我使用:
var movie = context.Movies.Include("Cast.ActingCredits").FirstOrDefault(m => m.Key == key);
问题是虽然列表ActingCredits
不为null,但它中没有值。是否有一些我缺少加载列表中的值? ActingCredits
是ICollection<Movie>
。
public class Actor : ModelBase
{
public ICollection<Movie> ActingCredits { get; set; }
}
public class Movie : ModelBase
{
public string Title { get; set; }
public DateTime Year { get; set; }
public Genre Genre { get; set; }
public int RunTime { get; set; }
public int Sales { get; set; }
public ICollection<Actor> Cast { get; set; }
}
编辑:我注意到这可能是错误的,并且是问题的原因。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Movie>().HasMany(p => p.Cast).WithMany();
modelBuilder.Entity<Actor>().HasMany(m => m.ActingCredits).WithMany();
}
答案 0 :(得分:1)
您没有在包含中键入正确的属性名称。 试试这个:
var movie = context.Movies.Include("Cast").FirstOrDefault(m => m.Key == key);
此外,请确保在执行此操作之前填充数据库。我测试了它并且它可以工作,它可以检索所有内容。
答案 1 :(得分:1)
问题在于数据库以及我如何初始化它。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Movie>().HasMany(p => p.Cast).WithMany(p => p.ActingCredits);
modelBuilder.Entity<Actor>().HasMany(m => m.ActingCredits).WithMany(m => m.Cast);
}
感谢所有评论的人。我相信我现在更了解实体框架。
答案 2 :(得分:0)
我建议添加:
using System.Data.Entity;
然后你可以使用强类型变量包含
var movie = context.Movies.Include(r => r.Cast)
但我认为你真正想要的是使用Select而不是Include? p>
var movie = context.Movies.Select(r => r.Cast).SelectMany(r => r.ActingCredits);