在我调整迁移文件后,实体框架代码首先似乎对我的 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 似乎不知道我更改了表的名称,即使该名称在迁移文件中也是如此。我需要在某处添加注释吗?
您遇到了 Code First 设置所期望的命名约定。除非在极少数情况下,否则切勿修改自动生成的迁移文件。
如果要更改交叉引用表的表名称,则需要创建第三个实体:
[Table("PersonRolesXRef")]
public class PersonRoles {
public virtual Person Person { get; set; }
public virtual Role Role { get; set; }
}
这将允许您控制实体框架创建的多对多表。然后使用TableAttribute
设置您希望表名在 SQL 中显示的内容。