我正在使用Entity Framework Code First方法在我的应用程序中进行数据访问。我有一个表Web_Documents
和一个表Web_Profils
以及一个关系表Web_Profil_joint_Documents
,所有这些都是我为POCO做的。我的问题是当我添加迁移时,Entity Framework创建了一个额外的关系表。现在在我的上下文中,我在两者之间进行了绑定,如下所示:
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
但每次都有错误。
此代码是否创建了新表?我认为它会在两个表之间添加多对多的关系,并将其添加到已存在的关系表中。
任何想法如何解决这个问题?
答案 0 :(得分:3)
您不应该为多对多关系定义相关实体POCO类。实体框架确实为我们自动生成它。从评论中我知道为什么你定义了关系实体。
相关实体将包含两列。
Web_Profils
Web_Documents
的主键。到目前为止一切都很简单。现在你想访问关系表中的数据(这是非常非常罕见的)然后你可以做这样的事情。
假设您有web_profile的实例,并且您希望在关系中获取其记录,则第一列是实例的id(主键),其次您可以通过选择其相关集合Web_Profil_joint_Documents
的ID来获取它。 / p>
Web_Profils.Web_Profil_joint_Documents.Select(d => d.Id)
所以这样你也可以实现第二列关系表。