从实体框架中的列表中检索值

时间:2017-06-05 17:22:48

标签: c# entity-framework

我的项目中有两种不同的模型:电影和演员。电影有演员列表,演员有电影列表。我想做的是给一部电影,让所有的演员,然后为每个演员检查他们的电影。

因此,为了获取信息,我使用:

var movie = context.Movies.Include("Cast.ActingCredits").FirstOrDefault(m => m.Key == key);

问题是虽然列表ActingCredits不为null,但它中没有值。是否有一些我缺少加载列表中的值? ActingCreditsICollection<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();
    }

3 个答案:

答案 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?

var movie = context.Movies.Select(r => r.Cast).SelectMany(r => r.ActingCredits);