【问题标题】:Deleting records in many to many relation删除多对多关系中的记录
【发布时间】:2015-08-30 06:43:36
【问题描述】:

当我删除电影时,我收到有关外键的错误。我的问题是如何从我要删除的 ID 为电影的表 MovieActor 中删除所有记录?最后是电影表中的电影?当我移除胶片时,它不可能编写会自动执行此操作的代码吗?

Actors.cs

[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; }
    }

电影.cs

[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; }

    }

上下文.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"));
    }

【问题讨论】:

    标签: c# many-to-many


    【解决方案1】:

    试试这个

    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 in actor)
    • 但如果我这样做 var movie = context.Movie.Single(x => x.ID == movieID); var actor = context.Actor.Single(x => x.ID == actorID);电影.演员.删除(演员);它有效... context.SaveChanges();
    • 我改变了答案,写 y.ID == movie.ID 而不是 y == movie
    【解决方案2】:

    据我所知,这是建立多对多关系时出现的问题,因为您无法删除任何内容,因为两者都相互引用。

    一种解决方案是创建另一个表(在您的情况下假设为 Roles),这将是与 Actor 和 Movie 的一对多关系。更多详情请查看many-to-many relationship in database design

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 2022-01-28
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      相关资源
      最近更新 更多