我从我的数据库重命名了一个表。所以我也改名为我的实体(从Favori到FavorisAffaire)。编译成功。但现在,当我运行我的应用程序时,我收到以下错误:
无效的对象名称'dbo.FavorisAffaires'
我的解决方案中没有这个FavorisAffaires!
我有FavorisAffaire(结尾为s)。我怀疑在我的解决方案的背景下出了问题...我已经尝试了一个干净,然后重建,但问题仍然存在。
有什么想法吗?
答案 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