System.Data.SqlClient.SqlException:无效的对象名称'dbo.Projects'

时间:2009-08-31 04:33:19

标签: asp.net-mvc linq-to-sql

我的MVC应用程序在尝试访问数据库中的任何表时返回SqlExceptions。

异常详细信息:System.Data.SqlClient.SqlException:无效的对象名称'dbo.Projects'。

我的应用程序是数据层的linq。

如果我使用旧的dll它工作正常,(这似乎不是数据库的问题)只是我上传的这个最新的应用程序。

详情

  

[SqlException(0x80131904):无效的对象名称'dbo.Projects'。]

  System.Data.SqlClient.SqlConnection.OnError(SqlException异常,   Boolean breakConnection)+1950890
  System.Data.SqlClient.SqlInternalConnection.OnError(SQLEXCEPTION   exception,Boolean breakConnection)+4846875
  System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject   stateObj)+194 System.Data.SqlClient.TdsParser.Run(RunBehavior)   runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,   BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject   stateObj)+2392
  System.Data.SqlClient.SqlDataReader.ConsumeMetaData()+33
  System.Data.SqlClient.SqlDataReader.get_MetaData()+83
  System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,   RunBehavior runBehavior,String resetOptionsString)+297
  System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(的CommandBehavior   cmdBehavior,RunBehavior runBehavior,Boolean returnStream,Boolean   async)+954
  System.Data.SqlClient.SqlCommand.RunExecuteReader(的CommandBehavior   cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String   方法,DbAsyncResult结果)+162
  System.Data.SqlClient.SqlCommand.RunExecuteReader(的CommandBehavior   cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String   方法)+32
  System.Data.SqlClient.SqlCommand.ExecuteReader(的CommandBehavior   行为,字符串方法)+141
  System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(的CommandBehavior   行为)+12 System.Data.Common.DbCommand.ExecuteReader()+12
  System.Data.Linq.SqlClient.SqlProvider.Execute(表达式查询,   QueryInfo queryInfo,IObjectReaderFactory factory,Object []   parentArgs,Object [] userArgs,ICompiledSubQuery [] subQueries,Object   lastResult)+975
  System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(表达式查询,   QueryInfo [] queryInfos,IObjectReaderFactory factory,Object []   userArguments,ICompiledSubQuery [] subQueries)+113
  System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(表达式   查询)+344
  System.Data.Linq.DataQuery 1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() +35 System.Linq.Buffer 1..ctor(IEnumerable 1 source) +247 System.Linq.<GetEnumerator>d__0.MoveNext() +108
System.Linq.Buffer
1..ctor(IEnumerable 1 source) +259
System.Linq.<GetEnumerator>d__0.MoveNext() +108
System.Collections.Generic.List
1..ctor(IEnumerable 1 collection) +7665172 System.Linq.Enumerable.ToList(IEnumerable 1 source)+61 C:\ mezza_crm \ mezza_crm \ Controllers \ ProjectsController.cs中的Mezza_crm.Controllers.ProjectsController.GetProjectList(NameValueCollection表单):164   Mezza_crm.Controllers.ProjectsController.List()in   C:\ mezza_crm \ mezza_crm \ \控制器ProjectsController.cs:53
  lambda_method(ExecutionScope,ControllerBase,Object [])+39
  System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase   controller,Object []参数)+17
  System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext   controllerContext,IDictionary 2 parameters) +178
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
2   参数)+24
  System.Web.Mvc&LT;&GT; c__DisplayClassa.b__7()   +52 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter)   filter,ActionExecutingContext preContext,Func 1 continuation) +254
System.Web.Mvc.<>c__DisplayClassc.<InvokeActionMethodWithFilters>b__9() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList
1个过滤器,ActionDescriptor actionDescriptor,   IDictionary`2参数)+192
  System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext   controllerContext,String actionName)+399
  System.Web.Mvc.Controller.ExecuteCore()+ 1266   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)   +27 System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext   requestContext)+7
  System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext)   +151 System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext)+57
  System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext的   httpContext)+7
  System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   +181 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&amp; completedSynchronously)+75

13 个答案:

答案 0 :(得分:49)

检查连接字符串中的Initial Catalog参数。可能是您的代码在Projects对象的错误数据库中查找。

例如,如果您的数据库同步设置只传输了master-database表的一个子集,那么如果Linq to SQL期望所有表都在数据库所指向的数据库中,则会遇到此错误。连接字符串。

答案 1 :(得分:3)

您是否可以访问要查询的SQL Server? 你能看到一个名为dbo.Projects的表或视图吗? 如果没有,那将是一个值得关注的好地方。

Linq to SQL在数据库和应用程序之间创建一个对象映射。如果您正在部署的新DLL不再与数据库匹配,那么这就是您希望得到的那种错误。

您的开发环境和部署环境之间是否有不同的数据库模式?

答案 2 :(得分:1)

此问题的原因可能是数据库的属性设置(带有.NET4的Sql2008R2)。

  • 更改数据库的COLLATION值时,问题可以随意重现。

要显示COLLLATION,请使用Sql Server Mgmt Studio。

  • 右键单击数据库,然后选择属性 - &gt;常规,然后在维护下查看COLLATION值

要更改COLLATION,(仍然)使用Sql Server Mgmt Studio。

  • 右键单击数据库,然后选择属性 - &gt;选项,从那里,您可以更改COLLATION值

答案 3 :(得分:1)

如果您处于开发阶段,在您的上下文类中有一个为您创建testdata的方法,请不要在构造函数中调用它,它会在您没有表时尝试创建这些测试记录然而。只是分享我的错误......

答案 4 :(得分:1)

这可能是由于您从中获取数据的表名不正确。请验证您在asmx文件中提到的表的名称以及在数据库中创建的表。

答案 5 :(得分:0)

如果您使用两个数据库,则可以添加另一个 DataClasses.dbml 并将第二个数据库映射到其中。
它有效。

答案 6 :(得分:0)

删除(yourdatabseName&gt; Tables&gt;系统表)中的_MigrationHistory表,如果您已在数据库中,然后在包管理器控制台中运行以下命令

PM> update-database

答案 7 :(得分:0)

我有同样的错误。原因是我创建了一个包含错误模式的表(它应该是[dbo])。我做了以下步骤:

  1. 我删除了所有没有前缀的表格&#34; dbo。&#34;

  2. 我创建并运行了此查询:

  3. CREATE TABLE dbo.Cars(IDCar int PRIMARY KEY NOT NULL,Name varchar(25) NOT NULL,    
    CarDescription text NULL)
    GO
    

答案 8 :(得分:0)

我遇到的问题是因为我在LocalDb中创建了一个数据库 如果是这种情况那么你必须写的如下所示:

    "SELECT * FROM <DatabaseName>.[dbo].[Projects]"

替换为您的数据库名称 您也可以放弃&#34; []&#34;

答案 9 :(得分:0)

enter image description here

我已经看到,当您定义结果实体时,如果您使用不同的方案,则新版本可以更好地通过以下方式定义它们,

您必须添加System.ComponentModel.DataAnnotations.Schema

using System.ComponentModel.DataAnnotations.Schema;


 [Table("InstitucionesMilitares", Schema = "configuracion")]

答案 10 :(得分:0)

我尝试了以下列表中的几乎所有答案,但对我没有用。但是请仔细阅读异常,然后尝试将我的Dbset名称TransactionsModel重命名为Transactions  对我有用。

旧代码:

public class MyContext : DbContext
    {
        //....
        public DbSet<Models.TransactionsModel> TransactionsModel { get; set; }
    }

新代码:

public class MyContext : DbContext
    {
        //....
        public DbSet<Models.TransactionsModel> Transactions { get; set; }
    }

答案 11 :(得分:0)

尝试这样做

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}

或者如果您使用.net core,请尝试

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Usuario>().ToTable("Usuario");
}

将Usuario替换为您的实体名称,例如DbSet <<< strong> EntityName >>不复数的实体

答案 12 :(得分:0)

TLDR::确认您没有两次连接到同一张表/视图。

FooConfiguration.cs    
builder.ToTable("Profiles", "dbo");
...

BarConfiguration.cs
builder.ToTable("profiles", "dbo");

对我来说,问题是我试图添加一个连接到与其他已经存在的其他实体相同的表的实体

我添加了一个新的带有实体和配置的DbSet,以为我们在解决方案中还没有它,但是在通过所有解决方案搜索表名之后,我找到了一个已经连接到它的地方。

切换为使用现有的DbSet并删除我新添加的DbSet 解决了该问题。