0

我的 VS 2012 在我的 MVC4 项目中有一个包含多个实体的模型。最近我在我的数据库中添加了一个名为“vwTeacherNames”的视图,我尝试更新模型,但我取消了Plorizing该更新的选项。

然后,我将我的实体重命名为“TeacherName”。现在,当我调整 Prj 时,在我为教师定义 DropDownList 的地方抛出了这个异常:

Invalid object name 'dbo.TeacherNames'.

我尝试了很多方法,例如使用自定义工具,删除 .tt 文件并再次生成,......但是问题仍然存在!

那么,我怎样才能告诉 EF 正确的表(实际上是视图)名称是vwTeacherNames什么?

非常感谢

4

1 回答 1

1

找到了!我在这里添加了一些更多的调整:

public class myDbContext : DbContext
{
    public PtDbContext()
        : base("DefaultConnection")
    {

    }

    ... //some entities

    //Here it is:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<TeacherName>().Property(t => t.FullName)
            .HasColumnName("TeacherName");

        modelBuilder.Entity<TeacherName>().ToTable("vwTeacherNames", schemaName: "dbo");                        

    }
}

更新:为什么要通过定义您之前定义的内容来浪费您的时间?!只需取消默认的表命名约定并享受您的 Prj 进展:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //Adding this line tells the EF not to go through that convention
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();               
    }

因此,它应该通过您的实体的属性来构建您的查询,EntitySetName其中EntityName第一个是 DB 表名称,第二个是您在 DbContext 中使用的实体名称。

于 2013-06-03T11:15:34.743 回答