在C#.NET实体中添加多对多关系

时间:2017-04-07 10:43:07

标签: c# asp.net-mvc database

我真的可以在我正在努力的想法中使用一些帮助。

我需要IdentityModel和BookModel之间的多对多关系。 像这样的东西。 DB Diagram I come up with

现在在我的代码中,我在IdentityModel中有这个。

public class ApplicationUser : IdentityUser
{

    public virtual ICollection<Book> Books { get; set; }

    ...
}


public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    ...
    public System.Data.Entity.DbSet<talkbooks.Models.Book> Books { get; set; }
}

这在我的书模型中

public class Book
{

    public int Id { get; set; }
    public string Name { get; set; }
    public string Isbn { get; set; }
    public virtual ICollection<ApplicationUser> Users { get; set; }

}

现在我希望用户能够从数据库中选择他们拥有的书籍(为了简单起见,现在只有一本书,我想使用下拉列表进行选择)然后将其存储在数据库。

我考虑过编辑已经搭建的ManageController,以包含一个负责将图书添加到帐户中的方法。

现在,当我创建数据库(代码优先实体)时,它按如下方式创建数据库:

ERD

我暂时遗漏了DiscussionModel和MessageModel。 现在我真的需要一些帮助来完成在控制器内部工作所需的代码。我真的尝试过这么多,而且我一直都在失败,我知道这是因为我是一个初学者并缺乏经验。所以我想学习你可以教给我什么。非常感谢所有帮助!

1 个答案:

答案 0 :(得分:0)

您的ApplicationDbContext使用EntityFramework,因此这与Identity 2.0无关,而是与EntityFramework本身无关。

要在Entity Framework中创建关系,您有两种选择:

  1. 使用注释
  2. 使用Fluent API
  3. 有关这两个选项的示例,请参阅this post。 我更喜欢Fluent API方法,但我认为这真的是个人的事情。在这种情况下,您的示例将如下所示:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Book>()
                    .HasMany<ApplicationUser>(b => b.Users) // book entity has many users
                    .WithMany(u => u.Books); // User entity includes many book entities
    }