从EF迁移脚本中查找目录路径的最佳方法是什么?

时间:2016-08-11 01:31:38

标签: c# .net entity-framework ef-migrations

我在项目中使用Entity Framework代码进行首次迁移。其中一个迁移通过从位于项目目录中的def foo(sub, lst): '''Checks if sub is in lst. Expects both arguments to be lists ''' if len(lst) < len(sub): return False return sub == lst[:len(sub)] or foo(sub, lst[1:]) 文件中读取数据来填充数据库表。项目结构如下所示:

csv

在我的- Soulution - Project - Migrations - CSVFolder - file1.csv - file2.csv - Migration1.cs - Migration2.cs 方法中,我得到这样的文件:

Up()

这在我的开发机器上运行正常,但是当我使用Octopus将其部署到测试服务器时,我得到一条未找到路径的异常

  

无法找到路径的一部分   'C:\八达通\应用\测试\解\ 1.1- alpha21 \迁移\ CSVFolder'

我检查了'drop'文件夹,其中的输出包含public override void Up() { var migrationsDir = AppDomain.CurrentDomain.BaseDirectory + "/Migrations/CSVFolder/"; // For some reason, Path.Combine() doesn't work for me here so I manually concatenate the strings. var templateFiles = Directory.GetFiles(migrationsDir, "*.csv"); foreach (var filename in templateFiles) { Sql(); // SQL Insert statement here. } }

我尝试了几种不同的方法来获取文件夹的路径,但它们可以在本地或服务器上运行。获取本地和服务器上的路径的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

您必须正确设置路径!如果测试测试运行器目录,AppDomain.CurrentDomain.BaseDirectory将返回,在应用程序模式下,您将获得.. \ Bin \ Debug等。您必须检查您有多少目录,直到您可以到达所需位置(CSVFolder)然后替换路径或更改它,例如:

var migrationsDir = AppDomain.CurrentDomain.BaseDirectory + "../../Migrations/CSVFolder/";   // For some reason, Path.Combine() doesn't work for me here so I manually concatenate the strings.

你已经注意到你要做的事情并不容易,所以你可以忘记这个问题,这就是诀窍。最好的方法是将cvs文件附加到程序集资源!在迁移过程中,您可以访问它们,如下所示:

在Up()

var file1 = Properties.Resources.File1;

此方法将保证Sql或Cvs文件始终在运行时附加/加载到程序集。

答案 1 :(得分:0)

这对我有用

AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory