2010-12-02 16 views
0

私は最近、LinqをSqlの機能に追加した.NET 3.5 Webアプリケーションを使用しています。LinqとSqlコンポーネントを使用してASP.NET Webサイトをデプロイする方法

しかし、私はそれを展開しようとすると、コンテキストオブジェクトのコンストラクタを呼び出すときに明らかにnull参照例外が発生します。

複雑さを増すために、私はWeb Deployment Projectを使用して1つのDLLにコンパイルします。 Linq to Sqlのものは他のものと一緒にコンパイルされるだろうと思った。しかし、今私はDLLと一緒にdbmlファイルを移動する必要があると思っています。

私はApp_Codeディレクトリにdbmlファイルを持っていたので、リモートサーバ上でそのディレクトリ構造を作り直そうとしました。しかし、.NETは私にプリコンパイルされたアプリケーションにApp_Codeディレクトリを持たせません。だから、dbmlファイルをルートディレクトリに移動したばかりですが、まだエラーが発生します。

ヘルプ!ここで

は私が取得していますエラーのスタックトレースです:

[とNullReferenceException:オブジェクト参照オブジェクトのインスタンスに設定されていません。] codeCS.SarcStateDataDataContext..ctor()28 DB_Interface.SarcStateDataDB ..ctor()+26 eSARC_Basic..ctor()+56 ASP.esarc_basic_aspx..ctor()+14 __ASP.FastObjectFactory_sarcwriting.Create_ASP_esarc_basic_aspx()+20 System.Web.Compilation.BuildResultCompiledType.CreateInstance()+ 32 System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath、タイプrequiredBaseType、HttpCont (HttpContextコンテキスト、String requestType、VirtualPath virtualPath、String physicalPath)+33 System.Web.UI.PageHandlerFactory.System.Web.IHttpHandlerFactory2 .GetHandler(HttpContextコンテキスト、String requestType、VirtualPath virtualPath、String physicalPath)+40 System.Web.HttpApplication.MapHttpHandler(HttpContextコンテキスト、String requestType、VirtualPathパス、String pathTranslated、Boolean useAppConfig)+160 System.Web.MapHandlerExecutionStep。 System.Web.HttpApplication.IExecutionStep.Execute()+93 System.Web.HttpApplication.ExecuteStep(IExecutionStepステップ、ブール& completedSynchronously)155

DB_Interface.SarcStateDataDBは、コンテキストオブジェクトのコンストラクタを呼び出すクラスです。

codeCS.SarcStateDataDataContext context = new SarcStateDataDataContext();

プログラムのローカルバージョンとデプロイされたバージョンが同じリモートデータベースを使用するため、接続文字列または接続オブジェクトを送信しません。しかし、それは問題になる可能性がありますか?ローカルアプリケーションはdbmlファイル内の接続文字列にアクセスできますが、デプロイされたアプリケーションは接続文字列にアクセスできません。

UPDATE:私はリフレクターのコードを見て、それがweb.configファイルから接続文字列を取得している、そしてすべてがその問題にcopaseticに見える...

答えて

1

こんにちはシンシア あなたが展開する必要はありません。 .dbmlファイル。 null参照例外は、.dbmlがないために発生していません。提供された情報で問題を推測するのは難しいですが、まず、実動と開発のデータベースのデータが同じであることを確認してください。たぶん、本番データベースにはいくつかのレコードがなく、あなたはそこからヌル参照を得るでしょう。また、VS Publishing Wizardを使用してプロジェクトを展開することを確認してください(プロジェクトを右クリック - > Publish)。また、これが役に立たない場合は、例外のスタックトレースを投稿できますか? ありがとう

+0

THanks Davita - 私はいくつかの情報で自分の投稿を更新しました。開発データベースと本番データベースの両方が同じであるため、私はそれが問題だとは思わない。 – Cynthia

1

DB_Interface.SarcStateDataDBあなたがクラスをインスタンス化するときに使用する接続文字列を渡してから、codeCS.SarcStateDataDataContext context = new SarcStateDataDataContext();で使用することをお勧めします。

次に、web.configファイル内のアプリケーションレベルで接続文字列を管理できます。こうすることで、prodとは別のdev dbを使用するように切り替えると、別々の接続文字列に簡単に移行できます。

2

問題が見つかりました。 SarcWritingConnectionStringを探していた接続文字列名は、最初に設定していたときにLinqがSqlにweb.configを追加したことを明らかにしたものでした。そして、私はそれが変更されていないと思ったので、私はプロジェクトをデプロイしたときに新しいweb.configをサーバーに移動しませんでした。私がそれを動かすと、すべてが機能します!

は(私は私が既にweb.configファイルにすでにだった接続文字列の代わりに、サーバーエクスプローラで設定したデータ接続を使用する - 私はそれを行う方法でも確認されませんでした)

感謝あなたの助けのために - 私はdbmlファイルを上げる必要はありません知って良いです。次回はもっと簡単になります!

関連する問題