提问者:小点点

无法确定关系


我是。NET实体框架中的新手,目前,当我试图实现两个实体之间的某种关系时,我被困住了。我将收到以下异常消息:

无法确定“ICollection”类型的导航属性“Actor.ActiveMovies”表示的关系

我不知道我是如何正确识别这种关系的。电影和演员实体如下所示。

movie.cs实体

    public class Movie
    {
        [Key]
        public Guid MovieId { get; set; }

        public string Title { get; set; }

        public string Description { get; set; }

        public string ThumbnailUrl { get; set; }

        public string Language { get; set; }

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

actor.cs实体

    public class Actor
    {
        [Key]
        public Guid ActorId { get; set; }

        public string ProfileImageUrl { get; set; }

        public string FirstName { get; set; }

        public string LastName { get; set; }

        public DateTime BornDate { get; set; }

        public virtual ICollection<Movie> ActiveMovies { get; set; }
    }

我想实现什么

电影和演员似乎是多对多的关系,因为一部电影可以有多个演员,一个演员可以在多部电影中活跃。虽然我还没有想出什么办法来做这件事。

我试过什么

我已经检查了DatabaseContext,我想我可以实现一个多对多,如下所示。

            modelBuilder.Entity<Movie>(entity =>
            {
                entity.HasKey(movie => movie.MovieId);
                entity.Property(movie => movie.Actors).IsRequired();
                entity.HasMany<Actor>(movie => movie.Actors);
            });

            modelBuilder.Entity<Actor>(entity =>
            {
                entity.HasKey(actor => actor.ActorId);
                entity.HasMany<Movie>(actor => actor.ActiveMovies);
            });

但这给了我异常消息

无法将属性或导航“Actor”添加到实体类型“Movie”,因为实体类型“Movie”上已存在同名的属性或导航。

我将感激任何洞察力在这种情况下!


共1个答案

匿名用户

您需要完全定义关系。在本例中,我们使用单独的表。试试这个。

 public class Movie
    {
        public Guid MovieId { get; set; }

        public string Title { get; set; }

        public string Description { get; set; }

        public string ThumbnailUrl { get; set; }

        public string Language { get; set; }

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



 public class Actor
    {
        public Guid ActorId { get; set; }

        public string ProfileImageUrl { get; set; }

        public string FirstName { get; set; }

        public string LastName { get; set; }

        public DateTime BornDate { get; set; }

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

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

   public Movie MovieId { get; set; }

   public int ActorId { get; set; }

   public Actor Actor{ get; set; }
    }

在OnModelCreating()中

  modelBuilder.Entity<MovieActor>()
            .HasKey(x=> new { x.ActorId, x.MovieId });  
       modelBuilder.Entity<MovieActor>()
            .HasOne(bc => bc.Movie)
            .WithMany(b => b.MovieActors)
            .HasForeignKey(bc => bc.MovieId);  
        modelBuilder.Entity<MovieActor>()
            .HasOne(bc => bc.Actor)
            .WithMany(c => c.MovieActors)
            .HasForeignKey(bc => bc.ActorId);