c# - Entity Framework 创建了一个我不想要的表

标签 c# asp.net sql-server entity-framework

我正在使用 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 确实会自动为我们生成它。从评论中我了解到您定义关系实体的原因。

相关实体将包含两列。

  1. Web_Profils 的主键
  2. 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/

相关文章:

java - 在应用程序服务器级别配置数据源与 Spring 的 applicationContext 的优点/缺点

MySql ASP.NET Identity 在 Win10 下意外绑定(bind)到 SQL Server

C# - FieldInfo 和 PropertyInfo 是不可变的还是可变的?

c# - 允许在正则表达式中使用希伯来字母

c# - 使用 IIS 和 ASP.NET 跟踪文件访问

ASP.NET MVC 身份验证 cookie

sql - SQL Management Studio 中用于筛选的键盘方法是什么?

c# - 令人困惑的线程行为

c# - ServiceStack REST API 设计

c# - 让 Entity Framework 生成带有 MySQL 所需的反引号标识符的 SQL