0

私の開発マシンでは、すべてが完全に機能します。本番接続の値を使用しても(開発マシンから本番に接続する場合でも)。機能していた以前のバージョンのサービスと同じ資格情報を使用しているため、linq2sql の代わりに EF5 を使用しているため、アクセス許可の問題ではないと思います。また、sql-profiler は失敗したログイン試行を表示しません。

接続文字列は次のとおりです。

データ ソース = MYSQLSERVER;データベース = MYDB;統合セキュリティ = True;

エラーは次のとおりです。

キー「attachdbfilename」の値が無効です。

dbContext コードに渡される接続文字列を記録しました。

Database.Connection.ConnectionString = settings.DbConnectionHourly;

これは、実際の dbContext (dll にパッケージ化されている) から継承するクラスであり、設定が注入されます。繰り返しますが、これは Dev では機能しますが、運用環境 (サーバー 2008 r2、IIS 7.5、framework.4) では機能しません。

4

1 に答える 1

0

エンティティ フレームワークは非常にスマートにしようとしていましたが、非常にスマートでないエラー メッセージを表示していたことが判明しました。したがって、慣例により、コンストラクターとしてコンテキスト名を渡さない場合、エンティティ フレームワークはクラス名を接続文字列の名前と見なします。それが何をするか (私は知りませんでした) は、sqlExpress に組み込まれたビジュアル スタジオを使用して自動的に接続し、スキーマを作成する開発中です。したがって、開発中は、この「自動魔法」の作成が成功したため、すべてが機能し、後で別のデータベースへの接続を変更したため、EF が内部で何をしていたかについて、私は賢明ではありませんでした (EF は間違ったことをしていましたが、最終結果は機能しました) )。

ただし、アプリケーションが本番環境に移行したとき、Web サーバーには sqlexpress やデータベースがないため、自動接続/作成シーケンスは失敗しました。エラーメッセージに有用な情報が含まれていれば、これは明らかです。しかし、私は「attachdbfilename」を設定したことがなく、「attachdbfilename」の値、コンテキスト、または何をしようとしているのかを教えてくれなかったので、これを理解することははるかに困難でした.

修正は簡単でした:

public HourlyContext(ISettingsWrapper settings)
        : base(settings.DbConnectionHourly)
    { }

コンテキストが作成された後に接続を設定する代わりに (作成プロセスは、組み込みの規則/デフォルトで魔法のようにすぐに機能しようとします)、コンストラクターを介してすぐに設定します。

于 2013-10-08T20:21:43.250 に答える