2009-08-31 181 views
19

私のデータベースのテーブルにアクセスしようとすると、MVCアプリケーションがSqlExceptionsを返しています。System.Data.SqlClient.SqlException:無効なオブジェクト名 'dbo.Projects'

例外の詳細:System.Data.SqlClient.SqlException:無効なオブジェクト名 'dbo.Projects'。

私のアプリは、データレイヤーのlinqです。

古いDLLを使用していると、アップロードした最新のアプリケーションDLLだけが正常に動作します(DBに問題はないようです)。

詳細

[SqlExceptionが(0x80131904):無効なオブジェクト名 'dbo.Projects']
System.Data.SqlClient.SqlConnection.OnError(SQLException例外、 ブールbreakConnection)1950890
System.Data.SqlClient.SqlInternalConnection.OnError(SqlExceptionが 例外、ブールbreakConnection)4846875
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)194 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior、SqlCommandオブジェクトcmdHandler、SqlDataReaderのデータストリーム、 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、ストリングresetOptionsString)297
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior、RunBehavior runBehavior、Boolean returnStream、Boolean 非同期)954
System.Data.SqlClient.SqlCommand.RunExecuteReader(たCommandBehavior cmdBehavior、RunBehavior runBehavior、ブールreturnStream、ストリング 方法、DbAsyncResult結果)162
System.Data.SqlClient.SqlCommand.RunExecuteReader(のCommandBehavior cmdBehavior、runBehavior runBehavior、ブールreturnStream、文字列 方法)+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工場は、[] parentArgsオブジェクト、[] userArgs、ICompiledSubQuery []サブクエリ、オブジェクト lastResultは)975
オブジェクト System.Data.Linq.SqlClient.SqlProvider.ExecuteAll 113
System.Data.Linq.SqlClient.SqlProvider(式クエリ、 QueryInfo [] queryInfos、IObjectReaderFactory工場は、[] userArguments、ICompiledSubQuery []サブクエリオブジェクト)。 System.Data.Linq.Provider.Prorovider.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 Cにおける(IEnumerableを1 collection) +7665172 System.Linq.Enumerable.ToList(IEnumerable 1つのソース)+61 Mezza_crm.Controllers.ProjectsController.GetProjectList(NameValueCollectionの形態): C 164 Mezza_crm.Controllers.ProjectsController.List():\ mezza_crm \ mezza_crm \コントローラ\ ProjectsController.csを\ mezza_crm \ mezza_crm \コントローラ\ ProjectsController.cs:53
lambda_method(ExecutionScope、ControllerBase、オブジェクト[])+39
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase コントローラ、オブジェクト[]パラメータ)+17
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext コントローラコンテキスト、IDictionary パラメータ)+24
System.Web.Mvc。 <> c__DisplayClassa.b__7() +52 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter フィルタ、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、ストリングactionNameの)399
System.Web.Mvc.Controller.ExecuteCore()126
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ステップ、ブール& completedSynchronously)75

答えて

3

照会しているSQL Serverにアクセスできますか? そこにdbo.Projectsというテーブルまたはビューがありますか? そうでなければ、それは見るのに適しています。

Linq to SQLはデータベースとアプリケーションの間にオブジェクトマップを作成します。あなたが配備しているあなたの新しいDLLがもうデータベースと一致しない場合、これはあなたが得ると予想されるエラーの一種です。

開発環境とデプロイメント環境のデータベーススキーマが異なるのはおそらくありますか?

+0

うんdbo.Projectsが存在し、前回のリリース以降に変更されていません。 私は別のテーブルをいくつか変更し、2つのテーブルを追加しました。しかし、私はサーバー上のDBの変更を反映しています。 私はdevで変更を加え、サーバ上の変更をミラーリングすることを忘れた場合、通常、このようなものが得られます。 System.Data.SqlClient.SqlException:無効な列名 'Actual'。 しかし、いったんテーブルを修正すると、それは通常動作します。 迅速な対応に感謝します。 –

42

接続文字列のInitial Catalogパラメータを確認します。あなたのコードがProjectsオブジェクトの間違ったデータベースを探している可能性があります。

たとえば、マスターデータベースのテーブルのサブセットのみが転送されるようなデータベース同期設定がある場合、Linq to SQLはすべてのテーブルがデータベース内にあると想定している場合にこのエラーが発生することがあります接続文字列によって。

+1

接続文字列は問題ありません。 Web.Configは最後のリリースから変更されておらず、最後のリリースはうまくいきました。 –

+10

+1これは私の問題でした。ああ! – fearofawhackplanet

+0

Azureからの指示に従い、Azureポータルから接続文字列をコピーするのは間違っていました。正しいか、私がモデル化したものは、https://azure.microsoftでした。com/en-us/documentation/articles/sql-database-dotnet-how-to-useを参照してください。これは確かに私が正しい方向に指摘されるのを助けました。 – Mark

0

2つのデータベースを使用する場合は、DataClasses.dbmlを追加し、2番目のデータベースをそのデータベースにマップすることができます。
これは機能します。

0

この問題の原因は、データベース(Sql2008R2 with .NET4)のプロパティ設定になります。

  • データベースのCOLLATION値を変更するときに問題が再現可能です。

COLLLATIONを表示するには、Sql Server Mgmt Studioを使用します。 SQL ServerのMgmt(仮想ディスクの管理)Studioを使用すると(まだ)、照合順序を変更する照合値

ため下メンテナンスを見て、>一般 -

  • データベースを右クリックし、[プロパティ]を選択します。

    • データベースを右クリックし、[プロパティ]を選択 - > [オプション]を、そこから、あなたが既に持っている場合(yourdatabseName>テーブル>システムテーブル)に_MigrationHistoryテーブルを削除しますCOLLATION値
+1

これは何に変更すると思われますか? – Ciwan

+0

右のコロケーションは何ですか – toha

0

を変更することができますあなたのデータベースを開き、パッケージマネージャコンソールで以下のコマンドを実行してください。

0

私は同じエラーがありました。原因は私が間違ったスキーマ(それは[dbo]であるべき)を持つテーブルを作成したことでした。私は次のステップを実行しました:

  1. 接頭辞 "dbo"を持たないすべてのテーブルを削除しました。

  2. 私が作成し、このクエリを実行します。

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

あなたはあなたのためのテストデータを作成し、あなたのコンテキストクラス内のメソッドを持っている開発の段階にある場合は、それを呼び出すことはありませんあなたのコンストラクタでは、テーブルをまだ持っていない間にテストレコードを作成しようとします。私は私のLocalDbでデータベースを作っていたので、ちょうど私の間違いを共有...私が持っていた

0

問題でした。以下に示すように
その場合は、あなたが書かなければならないのです。

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

データベース名で置き換えます。
おそらくもドロップすることができ、「[]」

関連する問題