C# 在我调整迁移文件之后,实体框架代码在我的dbo表名上首先看起来很混乱
我刚刚开始使用EntityFramework5(代码优先迁移)。我想我的问题可能只是给了一个比我工作时间更长的人(这是我们第一个尝试的项目) 我有三张桌子。一个是交叉参考表。课程要点如下: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
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; }
}