您的问题是,您没有告诉 Person 类,每个人可以有多个电影。
因此,通过在您的人员类中添加以下行:
public virtual ICollection<Movie> Movies { get; set; }
您的实体知道您的两个类可以对另一个类有多个引用。
为了满足这个要求,Entity Framework 将使用Movie_ID 和Person_ID 创建第三个表。
如果您想了解更多信息,请查找:
实体框架 - 多对多关系
或点击此链接:
http://www.entityframeworktutorial.net/code-first/configure-many-to-many-relationship-in-code-first.aspx
如果您不熟悉实体框架,也可以查看该页面上的其他文章。
更新:
抱歉,我错过了,您已经有另一个对您的人员表的引用。
这里你要告诉你的实体框架,你想通过fluent api以哪种方式引用这两个表。
查看this stackoverflow answer。这应该够了吧。
您必须将此代码插入到您的 DbContext 类的 OnModelCreating 函数中。
所以你的最终代码应该是这样的:
public class Movie
{
public int Id { get; set; }
public string Title { get; set; }
public virtual Person Director { get; set; }
public virtual ICollection<Person> Actors { get; set; }
}
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Movie> Movies_Actors { get; set; }
public virtual ICollection<Movie> Movies_Directors { get; set; }
}
并在您的 OnModelCreating 中添加以下代码:
modelBuilder.Entity<Movie>()
.HasMany(a => a.Actors)
.WithMany(a => a.Movies_Actors)
.Map(x =>
{
x.MapLeftKey("Movie_ID");
x.MapRightKey("Person_ID");
x.ToTable("Movie_Actor");
});
modelBuilder.Entity<Movie>()
.HasRequired<Person>(s => s.Director)
.WithMany(s => s.Movies_Directors);
我无法测试代码,但这应该可以解决问题。
如果您必须进行一些调整才能使其正常工作,请将它们添加到 cmets 中,以便其他人可以从中受益。