我有这些模特:
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Books> FavoriteBooks { get; set; }
}
public class Books
{
public int Id { get; set; }
public string Title { get; set; }
public string Author{ get; set; }
}
当我运行DBContext并检查生成的表时,Books表创建了Student_Id列。我希望Books表只是一个参考,而不是链接回学生。 如何才能使这种关系单向化,并且在Books中没有创建Student_Id列?我可以使用流利的API吗?或仅在简单的数据注释中?
感谢
答案 0 :(得分:3)
在流畅的API中,它看起来应该是这样的:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.HasMany(s => s.FavoriteBooks)
.WithMany();
}
这将为您创建一个“StudentBooks”表,以维持多对多关系。你的问题表明,这不是一对多的关系,因为学生可以有很多喜欢的书,但每本书都可能是很多学生的最爱。
<强>更新强>
为了完整起见,如果您已经定义了链接表,并且需要告诉EF映射的样子,请按照以下方式执行此操作:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.HasMany(s => s.FavoriteBooks)
.WithMany();
.Map(cfg => cfg.MapLeftKey("Student_Id")
.MapRightKey("Books_Id")
.ToTable("StudentBooks"));
}