C# 在我调整迁移文件之后,实体框架代码在我的dbo表名上首先看起来很混乱

C# 在我调整迁移文件之后,实体框架代码在我的dbo表名上首先看起来很混乱,c#,entity-framework,entity-framework-5,code-first,entity-framework-migrations,C#,Entity Framework,Entity Framework 5,Code First,Entity Framework Migrations,我刚刚开始使用EntityFramework5(代码优先迁移)。我想我的问题可能只是给了一个比我工作时间更长的人(这是我们第一个尝试的项目) 我有三张桌子。一个是交叉参考表。课程要点如下: public class Person { //person properties public virtual List<Roles> Roles {get;set;} } public class Role { //Role properties

我刚刚开始使用EntityFramework5(代码优先迁移)。我想我的问题可能只是给了一个比我工作时间更长的人(这是我们第一个尝试的项目)

我有三张桌子。一个是交叉参考表。课程要点如下:

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

public class Role
{
      //Role properties
      public virtual List<Person> Persons {get;set;}
}
我将此更改为:

    CreateTable(
        "dbo.PersonRolesXRef"...
成功了。数据库更新了,一切都很好;然而,当我这样做时:

foreach(var role in Person.Roles() )
{
...
}
我得到一个内部异常,其内容如下:

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

似乎EF不知道我更改了表的名称,即使它在迁移文件中。是否需要在某个地方添加注释?

您遇到的命名约定是首先设置代码所期望的。除非在极少数情况下,否则永远不要修改自动生成的migration文件

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

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

这将允许您控制实体框架创建的多对多表。然后使用设置表名在SQL中的位置。

我是否将此对象放入上下文中?@jason您将其放置在与
人员和
角色
类相同的位置
[Table("PersonRolesXRef")]
public class PersonRoles {
    public virtual Person Person { get; set; }
    public virtual Role Role { get; set; }
}