2017-01-05 4 views
1

私はEF 6コードベースの移行を使用しています。 デフォルトのデータとして挿入するために、Configuration.cs Seed()メソッドからファイルを読み込みたいとします。 私は以下のようにHostingEnvironment.MapPathを()を使用しています:EF Configuration.csファイルからファイルコンテンツを読み取る方法は?

string _homeContent = System.IO.File.ReadAllText(HostingEnvironment.MapPath(@"~/Data/DefaultContents/Home.html")); 

しかし、私はパッケージ-管理コンソールから更新-データベースコマンドを実行するとHostingEnvironment.MapPathはNULL値を返します。

ランニングシード法。

System.ArgumentNullException:値にnullを設定することはできません。

パラメータ名:System.IO.File.ReadAllText(文字列のパス)でのパス

は親切Configuration.csシード()メソッドから物理ファイルを読み取る方法をお勧めします。

答えて

1

私は自分で答えるかもしれません。

HttpContextオブジェクトがまだ準備されていないため、今回はServer.MapPathとHostingEnvironment.MapPathを使用できません。例えば

AppDomain.CurrentDomain.BaseDirectoryリターン ".. \プロジェクトディレクトリ\ binに"

C:\ YourSolutionDirectory \ YourProjectDirectory \ binに

しかし、我々はPath.Combine()メソッドを使用しては正確なファイルパスを取得するように、 "ビン" フォルダから上がる必要があります。

string homeFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..", @"Data\DefaultContents\Home.html"); 

結果:C:\ YourSolutionDirectory \ YourProjectDirectory \データ\ DefaultContents \ Home.html

+1

良い解決策は、これは私のためにそれを解決しました。 –

関連する問題