EntityFramework4.1を使用する単純なASP.NETMVC3テストWebアプリをまとめました。私のDBContextは次のようになります。
public class EFDbContext : DbContext
{
public DbSet<TestParent> TestParents { get; set; }
public DbSet<TestChild> TestChildren { get; set; }
}
したがって、EFがEFDbContextという名前の接続文字列を探すことを期待しています。web.configにローカル環境に含まれているものは次のとおりです。
<connectionStrings>
<add name="EFDbContext"
connectionString="data source=.\SQLEXPRESS;Initial Catalog=testDB;Integrated Security=SSPI;MultipleActiveResultSets=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
接続文字列にユーザー名もパスワードも指定していません。したがって、私の理解では、EFはデータベース接続にWindows認証を使用します。私のローカル環境では、すべてが期待どおりに機能します。
さて、このWebアプリをWebホスティング業者のサーバーにリリースするときは、SQL Server認証に切り替える必要があります(Webホスティング業者の制限-十分に公平です)。そこで、接続文字列を次のように調整しました。
<connectionStrings>
<remove name="LocalSqlServer" />
<add name="EFDbContext"
connectionString="Data Source = localhost\SQLEXPRESS; Initial Catalog = testDB; User Id = dbUser; Password = dbPassword; Integrated Security = SSPI; MultipleActiveResultSets = True; Persist Security Info=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
それが私が意識的に行った唯一の変更です。残念ながら、これはもう機能しません。表示されるエラーメッセージは、データベース接続がSQL Server認証ではなくWindows認証を使用して試行されたことを示しています(エラーメッセージはドイツ語ですが、ホスティング事業者が作成したWindowsユーザーの1人であることを確認したユーザーが表示されます) )。
エラーメッセージには、接続文字列の初期カタログ部分で指定したデータベース名も含まれています。これは、EFDbContextという名前の接続文字列が実際にEFによって読み取られ、使用されていることを明確に示しているように思えます。
私の問題は、問題に近づくための出発点さえ見つけることができないということです。全体が私にはブラックボックスのように見えます。EFはSQLServer認証を試行してから、フォールバックとしてWindows認証に切り替えますか?または、EFをSQL Server認証に強制するために、いくつかの構成ファイルの設定を変更する必要がありますか?
アプリケーションをさらに縮小するための賢明な方法を思い付くことができませんでした。私のグーグル検索は私をどこにも連れて行かなかった、そして私の頭を壁に何度もぶつけても解決策をもたらさなかった。ですから、どんな助けでも大歓迎です。