2

エンティティ フレームワークを使用し、データ アクセス レイヤーである MVC プロジェクトと Windows クラス ライブラリ プロジェクトを含むソリューションがあります。次のパッケージ マネージャー コンソール ラインで移行を有効にしようとしました Enable-Migrations -ProjectName PortlandRoad.DAL -ContextTypeName PortlandRoadDBContext -Force

次の行を使用してデータベースを更新しようとしました Update-Database -Verbose -Force

スタートアップ プロジェクトとして mvc プロジェクトを使用してこれを行うと、動作しますが、mvc プロジェクト web.config の接続文字列を使用します。スタートアップ プロジェクトとして dAL プロジェクトでこれを行うと、次のエラーが発生します。

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

私のDALプロジェクトの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=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <!--<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />-->
  </configSections>
  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=PortlandRoadDB;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\PortlandRoadDB.mdf" providerName="System.Data.SqlClient" />
  </connectionStrings>

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>
</configuration>

移行がdalプロジェクト専用に機能し、スタートアッププロジェクトであるMCVプロジェクトに依存しないように、これを修正する方法を誰か教えてください

ありがとう

4

2 に答える 2

2

私はWPFプロジェクトで同じ問題を抱えています。あなたには2つの選択肢があると思います。

オプション 1 Windows プロジェクトの起動時に、次を使用してデータベースへの正しいパスを指定してみてください。

AppDomain.CurrentDomain.SetData("DataDirectory","your\physical\path");

これにより、同じエラーが発生しますが、移行は引き続きプリンシパル データベースに適用できます。

オプション 2 この |DataDirectory| を動的に置き換える方法を見つける アプリケーションを起動する前に app.config ファイルに (.bat、または .ps または ...)。

別のオプション: 悪いもの。移行を実行する前に、アプリケーションを起動する前に、DataDirectory へのパスを app.config 内の物理的な一時パスに変更します (このファイルは、最新の移行履歴を維持するのに役立ちます)。一時ファイルのパスを |DataDirectory| に置き換えます。App.config を使用して起動時にこのパラメーターを変更します。この回避策を使用すると、アプリケーションの展開を計画している場合、将来のデータベースの変更を予測するためにすべての移行を追跡できます。

ほら。

于 2014-03-01T12:55:46.060 に答える
0

「|DataDirectory|」を使用している可能性があります DAL プロジェクトの接続文字列で? 「|DataDirectory|」以降 Asp.Netフォルダーであり、DALプロジェクトはAspプロジェクトではなく、おそらくディレクトリとして認識されず、DALプロジェクトには存在しない可能性があります。

于 2013-11-05T18:15:09.253 に答える