EntityFramework使用错误的tablename

时间:2011-06-18 23:02:53

标签: c# asp.net-mvc-3 entity-framework-4.1

当我尝试从我的Bieren表中获取数据时,我的代码给了我一个EntityCommandExecutionException。

异常消息说它找不到“dbo.Biers”,这很明显,因为它被称为“dbo.Bieren”。

我可以通过重命名数据库中的表来轻松解决这个问题。尽管如此,我不喜欢修复我的代码错误。

如何让实体框架使用正确的表而不是更改表的名称?

提前致谢。

3 个答案:

答案 0 :(得分:8)

对于数据库优先方法,StriplingWarrior的解决方案运行良好。但是,如果使用代码优先方法,则可以在目标实体类上使用System.ComponentModel.DataAnnotations.TableAttribute将实体类映射到数据库表。

然而,这种方式有点烦人,因为我们通常想要定义一个纯实体类。为此,您可以将其委托给另一个班级,或者使用OnModelCreating班级中覆盖的DbContext方法,如下所示。

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Category>()
        .ToTable("MyCategories");
    }

答案 1 :(得分:7)

使用TableAttribute属性装饰您的实体类,例如

[Table("Bieren")]

答案 2 :(得分:5)

您的实体框架模型包含有关其连接的表名称和连接的信息。如果您使用的是数据库优先方法,则应该有一个包含数据库模型的EDMX文件。最简单的方法是从数据库更新模型。

  1. 在Visual Studio中打开EDMX文件
  2. 删除不正确的“Biers”表
  3. 在后台右键单击,然后单击“从数据库更新模型”
  4. 将向导指向您的数据库,然后选择要添加的“Bieren”表
  5. 完成向导,出现“Bieren”表
  6. 也可以深入了解Biers类型的属性,并手动更改表名。