62

Entity Framework 5 を使用した Visual Studio 2012 ASP.NET MVC プロジェクトがあります。

データベースに依存する単体テストがいくつかあります。中央の SQL Server データベースを使用するようにテスト プロジェクトで app.config ファイルを設定すると、問題なく動作します。

ただし、LocalDb を使用すると、各開発者がテストを実行するときに独自のデータベースを使用できるようになります。特に、実行時にテストをセットアップしたいのでDropCreateDatabaseAlways

ただし、セットアップを機能させることはできません。app.config でこれを試してみると:

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

私は得る:

System.Data.SqlClient.SqlException: ファイルのアクティブ化エラーが発生しました。物理ファイル名 '\unittestdb.mdf' が正しくない可能性があります。追加のエラーを診断して修正し、操作を再試行してください。データベースの作成に失敗しました。リストされたいくつかのファイル名を作成できませんでした。関連するエラーを確認してください。

データベースを作成しようとしているので、mdf ファイルが既に存在することを望んでいるように思えます。mdf ファイルを手動で作成しても、エラー メッセージは変わりません。

4

5 に答える 5

34

試す:

AppDomain.CurrentDomain.SetData(
  "DataDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ""));

これにより、/bin/Debug/yourdbname.mdf に Db ファイルが作成されます

于 2013-02-04T05:31:43.097 に答える
10

私は使うだろう:

// Declare this property - this is set by MSTest
public TestContext TestContext { get; set; }

// In test initialization - note the signature should be exactly this
// A static void method with one argument of type TestContext 
[ClassInitialize]
public static void SetUp(TestContext context)
{
   AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(context.TestDeploymentDir, string.Empty));
}

を使用すると問題が発生する可能性がありますAppDomain.CurrentDomain.BaseDirectory。代わりに次を使用します。context.TestDeploymentDir

于 2013-03-08T15:52:00.290 に答える
3

テスト プロジェクトの場合は次の点に注意してください。

AttachDBFilename=|データディレクトリ|

web/production/whatever アプリの App_Data フォルダーとは対照的に、単体テストの出力 /bin/debug フォルダーを検索することを意味します。

2 つのことを行う必要があります。 1. データベース ファイルを App_Data フォルダーからテスト アプリのルートに移動します。2. データベースを強調表示して、Visual Studio にプロパティ ウィンドウを表示します。ビルド アクションを「コンテンツ」に設定して、プロジェクトの実行時に出力フォルダーにコピーされるようにします。

出来上がり。

于 2013-11-19T21:20:32.307 に答える
0

問題の答えを探しているときにあなたの質問を見つけました。別のプロジェクトで EntityFramework と nUnit を使用して、App.config を変更する必要がありました

このように見えました:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

于 2014-10-21T21:49:03.953 に答える