我们有一个使用Entity Framework 5的Visual Studio 2012 ASP.NET MVC项目,其中有一些依赖于数据库的单元测试。在测试项目中设置app.config文件以使用中央SQL Server数据库是可以的。然而,最好使用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 文件不会改变错误消息。
AppDomain.CurrentDomain.GetData("DataDirectory")
时你得到了什么值吗? - Ladislav MrnkaAppDomain.CurrentDomain.GetData("DataDirectory")
的值为null
。 - Klas MellbournSetData
将值设置为某个路径,要么不在连接字符串中使用|DataDirectory|
,因为它是null
。 - Ladislav Mrnka|DataDirectory|\
部分并没有帮助,我仍然得到相同的错误。但是,用C:\Temp\
替换它确实有所帮助!然后单元测试再次运行。这是一个很大的改进。锦上添花的是,如果数据库可以驻留在相对路径中,那就更好了。 - Klas Mellbourn