实体框架 - 无效的对象名称

时间:2012-02-20 19:41:08

标签: entity-framework

我有一个使用EF 4.1的项目。

在数据背景下:

 public DbSet<Customer> Customer { get; set; }       
 protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)      {            }

实体模型类:

[Table("User",SchemaName="dbo")]
public class User{  
public int Id { get; set; }  
public string FirstName { get; set; }  
public string LastName { get; set; } 
}

运行应用程序后,我遇到了以下错误。

无效的对象名称dbo.User

为什么呢?有什么问题?

2 个答案:

答案 0 :(得分:2)

你的OnModelCreating方法有什么用?

尝试删除默认的多个表名:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

答案 1 :(得分:0)

如果您正在使用配置映射(EntityTypeConfiguration)类来定义表,如果您忘记将表的Configuration类附加到模型构建器,则会出现此错误。

在我的情况下,它真的让我感到困惑,因为我已经有另一个表(SomeThing)在这个Context类中完美地工作了。只需添加一个新表(OtherThing),其中似乎的所有内容都与第一个相同,我就会收到错误:Invalid object name 'dbo.OtherThings

答案在我的Context类中:

public DbSet<SomeThing> SomeThings { get; set; }
public DbSet<OtherThing> OtherThings { get; set; }

...

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Configurations.Add(new SomeThingMap());

    // OOPS -- Forgot to add this!!
    modelBuilder.Configurations.Add(new OtherThingMap());
}

供参考,这是我的SomeThingMap课程:

public class SomeThingMap : EntityTypeConfiguration<SomeThing>
{
    public SomeThingMap()
    {
        ...

        this.ToTable("SomeThing");

        ...
    }
}

我的新OtherThingMap课程:

public class OtherThingMap : EntityTypeConfiguration<OtherThing>
{
    public OtherThingMap()
    {
        ...

        this.ToTable("OtherThing");

        ...
    }
}

这是一个很长的镜头,但我希望至少可以帮助其他人指出正确的方向。