不连贯错误:无效的对象名称

时间:2011-07-05 07:40:33

标签: .net entity-framework

我从我的数据库重命名了一个表。所以我也改名为我的实体(从Favori到FavorisAffaire)。编译成功。但现在,当我运行我的应用程序时,我收到以下错误:

无效的对象名称'dbo.FavorisAffaires'

我的解决方案中没有这个FavorisAffaires!

我有FavorisAffaire(结尾为s)。我怀疑在我的解决方案的背景下出了问题...我已经尝试了一个干净,然后重建,但问题仍然存在。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

这就是EF默认行为的方式。它使用多个名称。它可以关闭,或者您可以强制单个实体映射到正确的表,但这一切都取决于您正在使用的EF版本。

编辑:

  哎呀我忘了提到我曾经使用过   实体框架代码优先。

是的,你忘记提及你问题中非常重要的部分。

有几种方法可以做到这一点。

数据注释:

[Table("FavorisAffaire")]
public class FavorisAffaire
{ ... }

或流利的映射:

modelBuilder.Entity<FavorisAffaire>()
            .ToTable("FavorisAffaire");

或删除多元化约定(这具有全局范围,因此它可以破坏其他现有表的映射)

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

删除约定后,您应确保DbSet的名称是单数:

public DbSet<FavorisAffaire> FavorisAffaire { get; set; }

或者只是重命名你的桌子,因为桌子应该是复数。

答案 1 :(得分:0)

除了Ladislav Mrnka的答案之外,我还假设您在进行这些更改后没有重新创建数据库。因此,“Code First”为您的新实体生成了一个表名,之前不存在(确切地说,它可能被命名为“Favoris”)。如果您现在连接到已经具有旧架构的数据库,并且您没有命令EF重新创建数据库,那么它将假定它正在寻找的表(FavoriAffairs)(它不是)。< / p>

如果您的“Favoris”表中已有数据,我建议您将其重命名为“FavoriAffairs”,否则让Code First重新创建数据库。这样做是为了设置一个特定的数据库初始化程序,在此解释:http://davidhayden.com/blog/dave/archive/2011/04/27/DatabaseInitializersEFCodeFirstDatabaseSetInitializer.aspx