在EF迁移配置类的Seed方法中获取App_Data文件夹的路径

时间:2013-02-15 18:08:23

标签: asp.net-mvc-4 ef-code-first entity-framework-5 ef-migrations

如何在代码首次迁移的配置类的Seed方法中获取App_Data文件夹的路径。

我想从我放在App_Data文件夹中的文件中读取,并且在update-database命令之后运行Seed方法。 HttpContext.Current.Server.MapPath显然不起作用,因为此时没有HttpContext。

4 个答案:

答案 0 :(得分:2)

我得到了类似的东西:     string MyPath = AppDomain.CurrentDomain.BaseDirectory + "/../App_Data"

因为AppDomain.CurrentDomain.BaseDirectory在“/ bin”目录结束。

答案 1 :(得分:1)

这是一种让您入门的快捷方式:

var myPath = AppDomain.CurrentDomain.BaseDirectory;
//to quickly show the path, either attach another debugger or just throw an exception
throw new Exception(myPath);

答案 2 :(得分:1)

@Rusty Divine给出了一个很好的答案,但也许你会发现这对你更好:

System.IO.Path.Combine( System.Text.RegularExpressions.Regex.Replace(AppDomain.CurrentDomain.BaseDirectory, @"\\bin\\Debug$", String.Empty, System.Text.RegularExpressions.RegexOptions.IgnoreCase) ,   RELATIVE_PATH,  "FILENAME.EXE");

例如:

System.IO.Path.Combine( System.Text.RegularExpressions.Regex.Replace(AppDomain.CurrentDomain.BaseDirectory, @"\\bin$", String.Empty, System.Text.RegularExpressions.RegexOptions.IgnoreCase) ,  "App_Data\\Init",   "fileName.txt");

以这种方式(使用Regx),我们确保唯一的替换可能是AppDomain.CurrentDomain.BaseDirectory字符串的后缀(在末尾)。如果服务器路径中有子文件夹名为:“\ bin \ Debug”,则不会替换它们。

此解决方案不区分大小写,意味着“\ BIN \ debug”也将被替换。

此外,您不需要将字符串附加到一个字符串。 System.IO.Path.Combine将为您完成。

答案 3 :(得分:0)

对于它的价值......如果你要在单元测试中使用BaseDirectory,你需要进行字符串替换。但是,这仍然存在问题,即它使用单元测试项目的路径,所以如果你试图指向另一个项目中的文件,那就要厌倦了。在这种情况下,您将不得不对路径进行硬编码。

ngRoute