我正在使用 Entity Framework Code First 方法在我的应用程序中进行数据访问。我有一个表 Web_Documents
和一个表 Web_Profils
以及一个关系表 Web_Profil_joint_Documents
,所有这些我都制作了 POCO。我的问题是当我添加迁移时, Entity Framework 创建了一个额外的关系表。现在在我的上下文中,我在两者之间建立了如下绑定(bind):
modelBuilder.Entity<Web_Profils>()
.HasMany<Web_Documents>(p => p.Documents)
.WithMany(d => d.Profils)
.Map(Web_Profil_joint_Documents =>
{
Web_Profil_joint_Documents.MapLeftKey("IDProfil");
Web_Profil_joint_Documents.MapRightKey("IDDocument");
Web_Profil_joint_Documents.ToTable("Web_Profil_joint_Documents");
});
但我认为这会添加一个新表,因为我已经有了 Web_Profil_joint_Documents
,它会创建 Web_Profil_joint_Documents1
并将数据添加到第一个,实际上填充第二个。我曾尝试将表格逆向工程到我的模型中,但这只会造成一团糟。我还尝试删除 SQL Server Management 中的表,然后手动修改迁移以仅包含 Web_Profil_joint_Documents
但每次都出错。
这段代码是否创建了一个新表?我认为它会在两个表之间添加多对多关系并将其添加到已经存在的关系表中。
有什么办法解决这个问题吗?
最佳答案
您不应该为多对多关系定义相关实体 POCO 类。 Entity Framework 确实会自动为我们生成它。从评论中我了解到您定义关系实体的原因。
相关实体将包含两列。
Web_Profils
的主键Web_Documents
的主键。
到目前为止一切都很简单。现在您想要访问关系表中的数据(这种情况非常非常罕见),那么您可以这样做。
假设你有一个 web_profile 的实例,你想获取它的关系记录,那么第一列是实例的 ID(主键),第二列你可以通过选择它的相关 Web_Profil_joint_Documents
集合的 id 来获取它>.
Web_Profils.Web_Profil_joint_Documents.Select(d => d.Id)
这样你也可以得到关系表的第二列。
关于c# - Entity Framework 创建了一个我不想要的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44717308/