2011-11-01 63 views
1

我在实体框架中出现以下错误,无法为我的生活弄清楚是什么导致它。实体框架4.1无效的对象名称

无效的对象名称dbo.User“

在数据库中的实际的表名称叫做用户和右击并选择“更新模型从数据库”我身边有其他六位我把它添加到我的实体模型我的项目中的模型都连接到具有多个表名称的相同数据库,并且以完全相同的方式更新,没有任何问题。由于某种原因,EF在尝试执行更新时从我​​的表名中删除了's'。正如您从我的代码中可以看到的那样,我会在更新之前执行一个选择,而不会出现问题。

我也尝试删除该实体并重新创建它,取消选中'多重化或单数生成的对象名称'。但问题依然存在。

任何想法,将不胜感激这一个。

public void Update(User updatedUser) 
{ 
    using (var context = CreateUserContext()) 
    { 
     var entity = context.UserEntities 
      .Where(u => u.UserId == updatedUser.UserId) 
      .SingleOrDefault(); 

     if (entity != null) 
     { 
      entity.Name = updatedUser.Name; 
      entity.Description = updatedUser.Description; 
      entity.LastModifiedById = updatedUser.LastModifiedById; 
      entity.IsDeleted = updatedUser.IsDeleted; 

      context.UserEntities.ApplyCurrentValues(entity); 
      context.SaveChanges(); 
     } 
    } 
} 

回答

1

事实上,你可以选择用户让我相信EF映射是好的。

检查表格上是否错误地使用了dbo.User作为表格名称。

作为一个侧面说明,两件事情可以做,以帮助诊断这样的问题:

  1. 尝试在SSMS手动更新该行。这会告诉你问题是EF还是SQL Server(触发器,约束等)

  2. 使用SQL事件探查器来检查EF发送到数据库的SQL语句。

要检查的SQL语句,你也可以使用LINQPad,尽管(这时候),你将需要use the latest beta与EF 4.1工作。

+0

非常感谢。我使用了SQL Profiler,并且所有更新都看起来不错。然后我可以看到下一个动作,忘记了我在表格上触发了更新最后一次修改时间,derrr !!。再次感谢。 – Cragly

+0

@很高兴我能够提供帮助,而且我知道可以很容易地忽略触发器中的代码,特别是当您专注于应用程序的不同部分时。 –

相关问题