一对多关系实体框架4.1 mvc的问题

时间:2011-08-10 06:06:05

标签: asp.net-mvc entity-framework entity-framework-4 entity-relationship foreign-key-relationship

我有这些模特:

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吗?或仅在简单的数据注释中?

感谢

1 个答案:

答案 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"));
}