5

これは、Visual Studio 2012 Ultimate および SQL Server Express 2012 を使用した ConnectionStrings / ASP.NET MVC に関するものです。

このチュートリアルのフォローアップ: http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4私のweb.configでこれら2つの接続文字列:

<connectionStrings>
    <add name="DefaultConnection" 
         connectionString="Data Source=(LocalDb)\v11.0;
                           Initial Catalog=aspnet-MvcMovie-users;
                           Integrated Security=SSPI;
                           AttachDBFilename=|DataDirectory|\aspnet-MvcMovie-users.mdf"
         providerName="System.Data.SqlClient" />

    <add name="MovieDBContext" 
         connectionString="Data Source=(LocalDB)\v11.0;
                           AttachDbFilename=|DataDirectory|\Movies.mdf;
                           Integrated Security=True" 
         providerName="System.Data.SqlClient" />
</connectionStrings>

Web サイトは正常に動作しますが、最初のデータベースが App_Data フォルダーに作成され、2 番目のデータベースが "C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA" に作成される理由がわかりませんでした。どちらもこの属性を使用するため、両方とも App_data に作成されると思いました: AttachDBFilename=|DataDirectory|!

注:チュートリアルでは、App_Dataにある必要があると述べており、実際にそこにあることを示すスクリーンショットを追加しました!

私は答えを探していて、SQL の共謀に陥りました (ユーザー インスタンスが解決策かもしれないと思いました) が、これに対する答えに達することができませんでした: |

(これは、ユーザー インスタンスhttp://msdn.microsoft.com/en-us/library/bb264564(v=sql.90).aspxについて読むのに役立つ場合があります)

どんなアイデアでも大歓迎です。前もって感謝します。

よろしく

4

4 に答える 4

15

調査/テストの結果、次のようになりました。

VSは、DataContextのクラス名を調べ、クラス名と同じ名前の接続文字列を指定したかどうかを調べます。例えば:

public class MovieDataContext : DbContext

<connectionStrings><add name="MovieDataContext" ...

一致する接続文字列を見つけることができた場合、それぞれのデータ文字列で指定した基準に基づいてDBを作成します(DBをApp_Dataに追加するには、前述の両方の接続文字列に示されているように、DBのパスを|DataDirectory|に設定します質問で); 名前が一致しない場合、または接続文字列を指定しなかった場合、VSはデフォルト設定にフォールバックし、デフォルトの場所/設定(通常はC:\ Program Files \ Microsoft SQL Server \MSSQL11)にDBを作成します。 SQLEXPRESS \ MSSQL \ DATA)。

「IntegratedSecurity」設定も「InitialCatalog」もこれには影響しないことに注意してください(Integrated Security=TrueとIntegratedSecurity= SSPIの両方で、初期カタログの有無にかかわらず、App_DataにDBを作成できました)。

お役に立てれば。参加してくださった皆様、ありがとうございました。

于 2013-03-19T10:15:34.353 に答える
0

AMT が提供した内容はまさに正しいものです。.mdf および .sdf ファイルで接続文字列を使用するため、混乱を招きました。

DBContext のコンストラクターをオーバーライドし、パラメーター nameOrConnectionString を次のように指定することで、アプリケーションがコンテキスト クラスのクラス名と一致する名前の接続文字列を検索するデフォルト設定を変更できます。

public BlogsContext()
            : base("name=EFBlogs")
        {
        }

次に、アプリケーションは EFBlogs という名前の接続文字列を検索します。接続文字列が見つからない場合は、BlogsContext ではなく EFBlogs という名前でデータベースを作成します。

于 2013-04-23T14:50:23.137 に答える
0

同じ問題がありました。違いは統合セキュリティ設定にあると思います。SQLExpress をインストールし、MS SQL Server Management Studio を使用してそこに映画データベースを見つけました。

より良い説明については、この応答を確認してください。Integrated Security = True と Integrated Security = SSPI の違い

于 2013-03-12T17:35:22.593 に答える