3

これは、stackoverflow での最初の質問です。

私のローカル プロジェクトでは、ASP.NET MVC 3 と Entity Framework 4.3 を SQL Express と共に使用しています。

私の接続文字列では、MARS を true に設定しています。

しかし、自分のプロジェクトを Appharbor にデプロイすると、Appharbor は独自の接続文字列を挿入します。

ここで、接続文字列に MARS が設定されていません。だから私はこれを得る:

There is already an open DataReader associated with this Command which must be closed first.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: There is already an open DataReader associated with this Command which must be closed first. 

これまでのところ、私がこれで見た最良の解決策: http://support.appharbor.com/kb/add-ons/using-sequelizer

このコードがある場所:

var configuration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
var connectionString = configuration.ConnectionStrings.ConnectionStrings["ConnectionstringAlias"].ConnectionString;
if (!connectionString.Contains("MultipleActiveResultSets=True;"))
{
    connectionString += "MultipleActiveResultSets=True;";
}

configuration.ConnectionStrings.ConnectionStrings["ConnectionstringAlias"].ConnectionString = connectionString;
configuration.Save();

これをどこに配置すればよいかわかりません。グローバルの下に配置しようとしました

Aplication_Start() メソッド

しかし、それは私にこのエラーを与えます:

Server Error in '/' Application.

Object reference not set to an instance of an object.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error: 


Line 50: 
Line 51:             var configuration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
Line 52:             var connectionString = configuration.ConnectionStrings.ConnectionStrings["ConnectionstringAlias"].ConnectionString;
Line 53:             if (!connectionString.Contains("MultipleActiveResultSets=True;"))
Line 54:             {

Source File: C:\Users\William\Documents\Visual Studio 2010\Projects\xxx\xxx\Global.asax.cs    Line: 52 

Stack Trace: 


[NullReferenceException: Object reference not set to an instance of an object.]
   Educationexpander.MvcApplication.Application_Start() in C:\Users\William\Documents\Visual Studio 2010\Projects\xxx\xxx\Global.asax.cs:52

この問題の解決策を持っている人はいますか?

4

1 に答える 1

3

更新: Sequelizer 管理パネルを使用して、注入された接続文字列に対して複数のアクティブな結果セット (MARS) を有効にできるようになりました。web.configを変更する必要がなくなったため、AppDomain起動時にリロードが発生するため、これが推奨されるアプローチです。

答えは上記のコメントにあります。これは形式化するためのものです。

正しいものを使用する必要がありConnectionstringAlias(@chris-sainty に感謝)、更新された構成をディスクに書き込むには、アプリケーション設定でファイル システムの書き込みを有効にする必要があります。

于 2012-05-22T20:53:11.760 に答える