我是。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”上已存在同名的属性或导航。
我将感激任何洞察力在这种情况下!
您需要完全定义关系。在本例中,我们使用单独的表。试试这个。
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);