0

我有 3 个表和多对多关系——比如AuthorsBooksBookAuthors

当我更新实体框架 edmx 文件(从数据库更新)并选择所有 3 个表时,实际上我将在 EF 中获得 2 个表,而不是 3个。BookAuthors将被隐藏。这对我来说是个问题,因为有时我所拥有的book_id只是author_id. 在这种情况下,我想将这些值直接保存在中产阶级中。

当我尝试“作弊”时,我更新(到 EF)第一个BooksAuthors,并在第二个更新BookAuthors(反之亦然)中,我将在 edmx 中获得 3 个表,但在编译时也会出现错误:

从行开始映射片段的问题......具有可能不同键的两个实体被映射到同一行。确保这两个映射片段将 AssociationSet 的两端映射到相应的列。

那么如何在建立多对多关系的同时又可以直接访问中间表呢?

4

3 回答 3

2

我不太明白为什么您需要直接访问中间表。但只需向表中添加一个虚拟布尔字段(永远不会被使用),EF 将停止自动隐藏它。

于 2013-02-14T15:55:40.793 回答
2

据我所知,当您使用数据库优先方法而不修改中间表时,这是不可能的。如果您选择应用模型优先方法,而不是添加多对多关系,而是在模型中创建中间实体并使用一对多关系。

如果将数据库和另一列更改为中间表,中间表不仅包含外键,它也可以正常工作。

我也想知道为什么你需要将中间表作为一个实体来访问。

于 2013-02-14T15:59:44.763 回答
1

似乎您正在尝试做的(以及遇到问题的地方)是从book_id现有书籍中获取,以及author_id您想添加到书中的作者列表。

在这种情况下,只需从 authors 表中拉出所有作者,然后从 books 表中拉出书籍,并为每个作者执行Book.Authors.Add(author);.

于 2013-02-14T16:01:38.113 回答