Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架核心:在WebAPI中包含多对多相关对象_Entity Framework_Linq_Asp.net Core_Entity Framework Core_Asp.net Core Webapi - Fatal编程技术网

Entity framework 实体框架核心:在WebAPI中包含多对多相关对象

Entity framework 实体框架核心:在WebAPI中包含多对多相关对象,entity-framework,linq,asp.net-core,entity-framework-core,asp.net-core-webapi,Entity Framework,Linq,Asp.net Core,Entity Framework Core,Asp.net Core Webapi,我对.NET框架不太熟悉,但决定试用ASP.NET核心和EF核心。我想制作一个非常简单的Web API后端,但我在处理多对多关系时遇到了问题 我知道我需要为这两个实体创建一个关系表,如本文中的示例所示: 我还让我的模型生成器按照这里的描述创建关系 我的代码如下所示: 在DBContext中: protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builde

我对.NET框架不太熟悉,但决定试用ASP.NET核心和EF核心。我想制作一个非常简单的Web API后端,但我在处理多对多关系时遇到了问题

我知道我需要为这两个实体创建一个关系表,如本文中的示例所示:

我还让我的模型生成器按照这里的描述创建关系

我的代码如下所示:

在DBContext中:

protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        builder.Entity<MovieActor>().HasKey(x => new { x.MovieId, x.ActorId});

        builder.Entity<MovieActor>()
            .HasOne(m => m.Movie)
            .WithMany(ma => ma.MovieActors)
            .HasForeignKey(m => m.MovieId);

        builder.Entity<MovieActor>()
            .HasOne(m => m.Actor)
            .WithMany(ma => ma.MovieActors)
            .HasForeignKey(a => a.ActorId);

    }

    public DbSet<Movie> Movies { get; set; }

    public DbSet<Actor> Actors { get; set; }


}

您必须按如下所示进行更改

型号:

namespace Test.Models
{
    public class Movie
    {
        public int MovieId { get; set; }
        public string Title { get; set; }
        public DateTime ReleaseDate { get; set; }
        public string Code { get; set; }
        public string Path { get; set; }

        public ICollection<MovieActor> MovieActors { get; set; }
    }

    public class Actor
    {
        public int ActorId { get; set; }
        public string Name { get; set; }
        public ICollection<MovieActor> MovieActors { get; set; }
    }

    public class MovieActor
    {
        public int MovieId { get; set; }
        public Movie Movie { get; set; }

        public int ActorId { get; set; }
        public Actor Actor { get; set; }
    }
}
protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        builder.Entity<MovieActor>().HasKey(x => new { x.MovieId, x.ActorId});

        builder.Entity<MovieActor>()
            .HasOne(m => m.Movie)
            .WithMany(ma => ma.MovieActors)
            .HasForeignKey(m => m.MovieId);

        builder.Entity<MovieActor>()
            .HasOne(m => m.Actor)
            .WithMany(ma => ma.MovieActors)
            .HasForeignKey(a => a.ActorId);

    }

    public DbSet<Movie> Movies { get; set; }

    public DbSet<Actor> Actors { get; set; }

    public DbSet<MovieActor> MovieActors { get; set; }

 }
var actor = new Actor { ... };
context.Actors.Add(actor);

var movie = new Movie { ... };
context.Movies.Add(movie);

var movieActor = new MovieActor { Actor = actor , Movie = movie };
context.MovieActors.Add(movieActor);

context.SaveChanges();
如何添加记录:

namespace Test.Models
{
    public class Movie
    {
        public int MovieId { get; set; }
        public string Title { get; set; }
        public DateTime ReleaseDate { get; set; }
        public string Code { get; set; }
        public string Path { get; set; }

        public ICollection<MovieActor> MovieActors { get; set; }
    }

    public class Actor
    {
        public int ActorId { get; set; }
        public string Name { get; set; }
        public ICollection<MovieActor> MovieActors { get; set; }
    }

    public class MovieActor
    {
        public int MovieId { get; set; }
        public Movie Movie { get; set; }

        public int ActorId { get; set; }
        public Actor Actor { get; set; }
    }
}
protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        builder.Entity<MovieActor>().HasKey(x => new { x.MovieId, x.ActorId});

        builder.Entity<MovieActor>()
            .HasOne(m => m.Movie)
            .WithMany(ma => ma.MovieActors)
            .HasForeignKey(m => m.MovieId);

        builder.Entity<MovieActor>()
            .HasOne(m => m.Actor)
            .WithMany(ma => ma.MovieActors)
            .HasForeignKey(a => a.ActorId);

    }

    public DbSet<Movie> Movies { get; set; }

    public DbSet<Actor> Actors { get; set; }

    public DbSet<MovieActor> MovieActors { get; set; }

 }
var actor = new Actor { ... };
context.Actors.Add(actor);

var movie = new Movie { ... };
context.Movies.Add(movie);

var movieActor = new MovieActor { Actor = actor , Movie = movie };
context.MovieActors.Add(movieActor);

context.SaveChanges();

我已经做了这些更改,但现在我的控制器不高兴了。我无法再创建新的MovieActor实体并将其添加到上下文中,它表示,
“DbContext”不包含“MovieActor”的定义。
。我如何在这里添加关系?我现在创建了一部新电影,然后创建了一个新演员,然后用这些对象创建了一个电影演员实体。当然,我刚刚从控制器中添加了一个示例方法。尝试找到演员并将其添加到相应电影中的演员列表中。似乎您尚未实现我提到的更改。这样我们无法找到解决方案。因为如果您看到
EF core
文档,它们也显示了与我的帖子相同的方式。如果您无法根据这一点进行更改,希望您没有解决此问题的方法。例如:
\u context.Movie.FirstOrDefault(m=>m.code==Moviebundle.Movie.code)
。这必须是这样的
\u context.Movies.FirstOrDefault(m=>m.code==Moviebundle.Movie.code)
。还有很多其他人。。。