C#实体框架添加到许多一对多表

问题描述 投票:1回答:2

这是插入到一个多到多台的好做法?

user = new User
        {
            Id = userId,
            UserName = username,
            FirstName = firstName,
            LastName = lastName,
            UsersBooks = new List<UsersBooks>()
        };

        book = new Book
        {
            Title = "randomTitle2",
            Genre = "randomGenre2",
            UsersBooks = new List<UsersBooks>()
        };

        usersBooks = new UsersBooks
        {
            User = user,
            Book = book
        };

而在最后,我把它添加到上下文

actContext.UsersBooks.AddAsync(usersBooks);

所以我在每个班的这UsersBooks收集 - 用户的书。一个用户可以有许多书籍和一本书可以被很多用户获取(哈利·波特的副本,让我们说)。所以我应该每次都创建一个新的

  • usersBook并添加它,而传递用户和书籍的各个时间?因为我看到,经过这本书被添加到它的根据表,这是正确的。也许我问是否有在大多数方面有经验的开发人员使用更好的方法
c# .net entity-framework-6
2个回答
3
投票

随着EF6你有两个选择:

1)由于EF6支持许多一对多的关系外的开箱你可以用该功能去(即在由vasily.sib注释说明)。

优点:你的模型和代码看起来更清洁,而不过量模型(UsersBooks

缺点:它不灵活的方式。在未来,你可能需要额外的属性添加到关系表。这种方法不会允许它

2)处理许多一对多的关系,有两个一个一对多的关系基本概念(像你这样)

优点:你可以添加任何额外的属性,以这种关系。它是一种灵活的方法

缺点:你的代码始终应该多一个模型(UsersBooks)工作

所以,如果你处理一个简单的场景就够了,那么你就可以用第一种方法去。否则,你需要考虑的第二位。

顺便说一句,目前,EF core不支持多到许多关系


1
投票

你并不需要直接插入UsersBooks表。

一旦你更新usersbook列表,或在booksuser列表中,关系(UsersBooks)将自动更新。

其实,你并不需要声明一个UsersBooks型号为许多一对多的关系。如果你声明ICollection<User>Book的Code First模型,并在ICollection<Book>模型申报User,该UsersBooks表将通过实体框架自动数据库中创建。

© www.soinside.com 2019 - 2024. All rights reserved.