C# 删除多对多关系中的记录

C# 删除多对多关系中的记录,c#,many-to-many,C#,Many To Many,当我删除电影时,我得到关于外键的错误信息。我的问题是如何删除表MovieActor和ID movie中我要删除的所有记录?在电影桌的最后是电影?它不可能写的代码,将自动做到这一点,当我删除电影 演员 [Table("Actor")] public partial class Actor { public Actor() { Movie = new HashSet<Movie>(); }

当我删除电影时,我得到关于外键的错误信息。我的问题是如何删除表MovieActor和ID movie中我要删除的所有记录?在电影桌的最后是电影?它不可能写的代码,将自动做到这一点,当我删除电影

演员

[Table("Actor")]
    public partial class Actor
    {
        public Actor()
        {
            Movie = new HashSet<Movie>();
        }

        public int ID { get; set; }

        [Required]
        [StringLength(50)]
        public string FirstName { get; set; }

        [Required]
        [StringLength(50)]
        public string LastName { get; set; }

        public virtual ICollection<Movie> Movie { get; set; }
    }
[表(“参与者”)]
公共部分类参与者
{
公共行为者()
{
Movie=新HashSet();
}
公共int ID{get;set;}
[必需]
[长度(50)]
公共字符串名{get;set;}
[必需]
[长度(50)]
公共字符串LastName{get;set;}
公共虚拟ICollection电影{get;set;}
}
电影公司

[Table("Movie")]
    public partial class Movie
    {
        public Movie()
        {
            Actors = new HashSet<Actor>();
            Countries = new HashSet<Country>();
            Directors = new HashSet<Director>();
            Genres = new HashSet<Genre>();
            Writers = new HashSet<Writer>();
        }

        public int ID { get; set; }

        [Required]
        [StringLength(50)]
        public string Title { get; set; }

        [StringLength(50)]
        public string Title2 { get; set; }

        public int Year { get; set; }

        [StringLength(255)]
        public string Description { get; set; }

        public int Lenght { get; set; }

        public string Poster { get; set; }

        public DateTime? DateAdded { get; set; }

        public long? BoxOffice { get; set; }

        public string TrailerLink { get; set; }

        public virtual ICollection<Actor> Actors { get; set; }

    }
[表格(“电影”)]
大众电影
{
公共电影()
{
Actors=newhashset();
Countries=新HashSet();
控制器=新的HashSet();
Genres=新HashSet();
Writers=newhashset();
}
公共int ID{get;set;}
[必需]
[长度(50)]
公共字符串标题{get;set;}
[长度(50)]
公共字符串标题2{get;set;}
公共整数年{get;set;}
[StringLength(255)]
公共字符串说明{get;set;}
公共整数长度{get;set;}
公共字符串海报{get;set;}
公共日期时间?已添加日期{get;set;}
公共长途售票处{get;set;}
公共字符串TrailerLink{get;set;}
公共虚拟ICollection参与者{get;set;}
}
Context.cs

 public partial class Context : DbContext
    {

         public Context()
            : base("name=DbModel")
        {
        }


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


        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Actor>()
                .HasMany(e => e.Movie)
                .WithMany(e => e.Actors)
                .Map(m => m.ToTable("MovieActor").MapLeftKey("ActorID").MapRightKey("MovieID"));
    }
公共部分类上下文:DbContext
{
公共上下文()
:base(“name=DbModel”)
{
}
公共虚拟数据库集参与者{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(e=>e.Movie)
.有许多(e=>e.Actors)
.Map(m=>m.ToTable(“MovieActor”).MapLeftKey(“ActorID”).MapRightKey(“MovieID”);
}
试试这个

using(var context = new Context())
{   
    var movie = context.Movies.Single(x=>x.ID == movieID);

    var actors = context.Actors.Where(x=>x.Movie.Any(y=>y.ID == movie.ID));

    foreach(var actor in actors)
    {
        actor.Movies.Remove(movie);
    }

    context.SaveChanges();
}

据我所知,当你建立一个多对多的关系时,这是一个问题,因为你不能删除任何东西,因为两者都是相互引用的


一个解决方案是创建另一个表(比如角色,在您的例子中)这将是与演员和电影的一对多关系。检查更多详细信息。

我得到错误:System.NotSupportedException:无法创建类型为“MC.Model.Movie”的常量值。此上下文中仅支持基元类型或枚举类型。在哪一行获得此异常?在这一行中:foreach(演员中的var-actor)但如果我执行var-movie=context.movie.Single(x=>x.ID==movieID);var-actor=context.actor.Single(x=>x.ID==actorID);movie.actor.Remove(actor);它工作…context.SaveChanges();我更改了答案,写y.ID==movie.ID而不是y==movie