2011-07-05 53 views
-3

我从我的数据库中重命名了一个表。所以我也重新命名了我的实体(从Favori到FavorisAffaire)。编译成功。但是现在,当我跑我的申请,我得到的错误如下:不连贯的错误:无效的对象名称

无效的对象名称dbo.FavorisAffaires“

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

我有收藏分享(收到结束秒)。我怀疑在我的解决方案的背景中有什么错误...我已经尝试清理,然后重建,但问题仍然存在。

任何想法?

+0

这是什么与ASP.NET MVC 3呢?请适当地标记你的问题,在你的情况下,我想你是在谈论实体框架? –

+0

@Darin:这是一个ASP.NET MVC3解决方案。但是你是对的,它似乎更具体到一个实体框架问题。我添加了相应的标签。 – Bronzato

+0

你检查过模型了吗?在VS中打开EDMX,点击FavorisAffaire表并按下Alt + F4(打开属性)。在属性中是实体集名称的字段。对于大多数词汇,EF在表名的末尾添加“S”以表示复数。如果它对你没有意义,删除“S”? – Smudge202

回答

2

这就是EF默认行为。它使用名称的多元化。可以关闭它,也可以强制单个实体映射到适当的表格,但这一切取决于您使用的EF版本。

编辑:

oops I forgot to mention that I used Entity Framework Code First.

是的,你忘了提及你的问题很重要的一部分。

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

数据注释:

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

或者流利的映射:

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

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

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 

一旦你移除约定,你应该确保这个名字DbSet我Š奇:

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

或者干脆重命名表,因为表应该是复数。

0

除了拉吉斯拉夫Mrnka的答案,我认为你没有重新创建你的数据库,你做这些更改后。因此,“Code First”为您的新实体生成了一个表名,以前并不存在(具体来说,它可能被命名为“Favoris”)。如果你现在连接到一个已经拥有旧模式的数据库,并且你没有命令EF重新创建数据库,它会假定它正在查找的表(FavoriAffairs)是存在的(它不是)。

如果你已经在你的“Favoris”表中的数据,我建议你将其重命名为“FavoriAffairs”,否则让代码第一次创建数据库。这是树立了一个特定的数据库初始化完成后,这里解释:http://davidhayden.com/blog/dave/archive/2011/04/27/DatabaseInitializersEFCodeFirstDatabaseSetInitializer.aspx

相关问题