77

基本的に、チュートリアルに従って、.mdf後でファイルを削除することにしました。

アプリケーションを実行しようとすると、次のエラーが表示されます (このスレッドのタイトル)。エラーが発生するコードを以下に示します (ASP.NET MVC 4):

OdeToFoodDB db = new OdeToFoodDB();

public ActionResult Index()
{
    var model = db.Restaurants.ToList();
    return View(model);
}

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

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

SQL Server オブジェクト エクスプローラーを見てみましたが、次のように見えます。

また、サーバー エクスプローラーにデータ接続が表示されません。

また、サーバー エクスプローラーで新しい接続を追加しようとすると、 という名前のデータベースが表示されませんOdeToFoodDb

この幅広い質問で申し訳ありませんが、私はEntity Frameworkが初めてで、何が問題なのかよくわかりません。

4

22 に答える 22

128

SQL Server Local Db の場合、Initial Catalogプロパティを使用しないでください。使用することをお勧めします:

<add name="DefaultConnection" 
     connectionString="Data Source=(LocalDb)\v11.0;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\OdeToFoodDb.mdf" 
     providerName="System.Data.SqlClient" />

ローカル db は同じ mdf ファイルで複数のデータベースをサポートしていないと思うので、最初のカタログを指定することはサポートされていません (または十分にサポートされておらず、いくつかの奇妙なエラーがあります)。

于 2013-11-24T16:05:08.540 に答える
60

これを見てください:Entity Frameworkはデータベースを作成しません

データベースに別の名前を付けてみます。同じ名前のデータベースを 2 度目に作成しようとすると、SQL Express で問題が発生することがあります。SQL Server Management Studio を使用してこれを修正する方法がありますが、通常は別のデータベース名を使用する方が簡単です。

編集この回答は、バグとOPで使用される回避策を 確認するため受け入れられました(データベースの名前を変更すると役立つ場合があります)。データベースの名前を変更することは実際には受け入れられない方法であり、問​​題を完全に解決するわけではないことに完全に同意します. 残念ながら、SSMSで実際に解決する他の方法を確認しませんでした。

于 2013-06-10T20:04:22.480 に答える
35
  1. パッケージ マネージャー コンソールから次を実行します。

    sqllocaldb.exe stop v11.0

    sqllocaldb.exe delete v11.0

  2. プロジェクトを実行する

  3. ユーザー登録
于 2015-01-15T02:02:02.887 に答える
5

私は同じ問題に直面しました。VS 2013 の次の手順で問題が解決しました。

  1. サーバー エクスプローラーで、データベースへの新しい接続を追加します。
  2. Microsoft SQL Server データベース ファイルをデータ ソースとして選択します
  3. web.configの接続文字列に従って、データベースファイル名を選択してください
  4. 新しいデータベース ファイルが作成され、サーバー エクスプローラーに "MyDatabaseName" と "MyDatabaseName (MyProjectName)" という 2 つのデータベース接続が表示されました。
  5. 1 つの接続を削除します (「MyDatabaseName」を削除しました)
于 2014-11-17T13:27:37.250 に答える
3

SQL SERVER Management Studio を使用してこれを修正するには

あなたの問題:「ファイル 'YourDB.mdf' をデータベース 'YourConnStringNamedContext' として添付できません。

理由: SqlLocalDb の実行中のインスタンス内でデータベースを実際に削除せずに、バッキング ファイル .mdf、ldf を削除したために発生します。VS でコードを再実行しても、同じ名前の DB を再作成することはできないため、役に立ちません (そのため、名前の変更は機能しますが、古いファントム DB 名はそのまま残ります)。

修正:私は VS2012 を使用していますが、別のバージョンでも同様に採用しています。

下のパスに移動して入力します

c:\program files\microsoft sql server\110\Tools\Binn>sqllocaldb 情報

上記のコマンドは、「v11.0」を含むインスタンス名を示しています

インスタンスがすでに実行されている場合は、プロンプトで入力します

sqllocaldb 情報 v11.0

次の情報に注意してください Owner: YourPCName\Username 、 State: Running 、 Instance pipe name: np:\.\pipe\LOCALDB#12345678\tsql\query 、ここで 123456789 はランダムな英数字です

State が実行中または停止していない場合は、次のコマンドでインスタンスを起動します

sqllocaldb 開始 v11.0

上記と同じ情報を抽出します。

SS Management Studio の [接続] ダイアログ ボックスで、次のように入力します。

サーバー名: np:\.\pipe\LOCALDB#12345678\tsql\query

認証: Windows 認証

ユーザー名: (所有者と同じ。Win.auth ではグレー表示されます。)

接続したら、削除したファントム DB を見つけ (たとえば、YourDB.mdf は YourDB という名前のデータベースを作成する必要があります)、実際に削除します。

終わり!それがなくなったら、VS EF で問題なく再作成できます。

于 2016-07-12T08:13:24.950 に答える
1

すべての回答を読んだわけで.mdfはありませんが、ファイルが のように SQL インストール パスの一部ではない場合、SQL データベース エンジン サービス アカウントには、ファイルを作成して書き込み、ファイルを読み取るC:\Temp権限さえありません。..ldf.mdf

解決策は、SQL インスタンス サービスを実行する SQL Server データベース エンジン サービス アカウントにファイル システム権限を付与することです。そのため、Windows エクスプローラーを介して、およびアカウントのファイルをC:\Temp含むパスにアクセス許可を完全に制御できるようにしました。.mdfNT Service\MSSQL$SQLEXPRESS01NT Service\MSSQL$MSSQL2016

これは、まさにこの問題について詳しく説明しているMicrosoft の記事です。

于 2020-02-23T01:34:56.467 に答える
1

データベースの初期化に使用されるコンテキストセクションをコメントアウトすると、問題が解決することがわかりました。Havnt にはまだシード文の何が問題なのかを突き止める時間がありましたが、シードを削除することで問題は解決しました。

于 2017-05-17T06:37:45.387 に答える
0

まったく同じではない同様の問題に遭遇しました。データベースが既に存在する場合、この問題は次のコードで解決されました。

<add name="DefaultConnection" connectionString="Data Source=.;AttachDbFilename=|DataDirectory|\aspnet-EjournalParsing-20180925054839.mdf;Initial Catalog=aspnet-EjournalParsing-20180925054839;Integrated Security=True"
      providerName="System.Data.SqlClient" />

于 2018-09-26T08:15:25.030 に答える
0

同じエラーが発生しました。奇妙なことに、私は 1 つの新しいプロジェクト フォーム スクラッチを持っていましたが、そこでは完全に機能し、別のはるかに大きなプロジェクトでは常にそのエラー メッセージに遭遇しました。

完全に機能するプロジェクト (ほぼ) は、常にデータベース (ファイルを含む) を自動的に作成します。任意のコマンド、読み取り、書き込み、更新が可能です。ファイルが作成されます。もちろん使ってる

DropCreateDatabaseIfModelChanges

問題が発生するケースは 1 つだけです。mdf が自動作成され、mdf とログ ファイルを削除した場合です。それからそれについてでした。自動作成にさようなら...

それを修正するために私が見つけた唯一の方法は、言及されたようなものでした:

sqllocaldb stop v11.0 & sqllocaldb delete v11.0

その後、すべてが正常に戻ります (LocalDB によって処理される他のすべてのデータベースも失われます!)。

編集:それは真実ではありませんでした。試してみたところ、v11.0 が自動的に再作成され、すべての mdfs が利用可能なままになります。「非ファイルベース」の LocalDB は試していません。

紛らわしいのは、他の何かが間違っていた場合にもこのエラーが発生したことです。したがって、私の提案は、DB セットアップが健全で安定していることを確認したい場合です。新しいソリューション/プロジェクトを最初から作成し、最も基本的な DB コマンド (エンティティの追加、すべてのエンティティの表示、すべてのエンティティの削除) を使用して、次を参照してください。それが機能する場合。

YES の場合、問題は VS2013 の構成とバージョン管理、ナゲットなどの深淵のどこかにあります。

いいえの場合、LocalDB のインストールに問題があります。

EFで何が起こっているのかを本当に理解したい人のために(そして、私がそうするかどうかはまだわかりません:-)) http://odetocode.com/Blogs/scott/archive/2012/08/14/a-troubleshooting- Guide-for-entity-framework-connections-amp-migrations.aspx

PS: 実行中のサンプル プロジェクトが必要な場合は、私に知らせてください。

于 2015-11-15T10:16:11.027 に答える
0

奇妙なことに、まったく同じ問題で、構成の次のセクションで ' を 'v11.0' に変更するのに役立ちました。

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
于 2016-08-05T20:38:47.787 に答える