1

我刚刚开始使用 Entity Framework 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 不知道我更改了表的名称,即使它在迁移文件中。我需要在某处添加注释吗?

4

1 回答 1

2

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

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

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

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

于 2013-09-19T13:14:42.700 回答