在我调整迁移文件后,实体框架代码首先似乎对我的 dbo 表名称感到困惑

本文关键字:dbo 我的 文件 迁移 调整 代码 框架 实体 | 更新日期: 2023-09-27 18:31:54

我刚刚开始使用实体框架 5(代码优先迁移)。我认为我的问题可能只是给一个比我工作时间更长的人(这是我们的第一个项目)。

我有3张桌子。一个是交叉引用表。这些类的要点如下:

public class Person
{
      //person properties
      public virtual List<Roles> Roles {get;set;}
}
public class Role
{
      //Role properties
      public virtual List<Person> Persons {get;set;}
}

在此处添加迁移会导致一个文件,其中 EntityFramework 建议的表名为:

    CreateTable(
        "dbo.PersonRoles"...

我将其更改为:

    CreateTable(
        "dbo.PersonRolesXRef"...

这奏效了。数据库更新了,所有好东西;但是,当我这样做时:

foreach(var role in Person.Roles() )
{
...
}

我得到一个内部异常,内容如下:

"Invalid object name 'dbo.PersonRoles' ..."

EF 似乎不知道我更改了表的名称,即使该名称在迁移文件中也是如此。我需要在某处添加注释吗?

在我调整迁移文件后,实体框架代码首先似乎对我的 dbo 表名称感到困惑

您遇到了 Code First 设置所期望的命名约定。除非在极少数情况下,否则切勿修改自动生成的迁移文件。

如果要更改交叉引用表的表名称,则需要创建第三个实体:

[Table("PersonRolesXRef")]
public class PersonRoles {
    public virtual Person Person { get; set; }
    public virtual Role Role { get; set; }
}

这将允许您控制实体框架创建的多对多表。然后使用TableAttribute设置您希望表名在 SQL 中显示的内容。