假设我的解决方案中有一个EntityFramework数据访问层类库项目。
如何从此解决方案中的其他项目为DataDirectory
提供自定义值,以便DAL类库中的connectionString
可以使用它?
我需要为DataDirectory
提供一个特定路径,以便始终在特定目录中生成和检测我的LocalDb文件 - 我还需要代码优先迁移才能处理此数据库文件。
如果我不向我的DAL类库提供DataDirectory
值,我不能update-database
,因为DAL中的DataDirectory
评估为empty string
,并且整条路径到数据库文件被识别为'\db.mdf'
,这是不正确的。
到目前为止,我是通过在DataDirectory
构造函数中的注册表项(它是我的应用程序的安装路径)中设置EfDbContext
的路径来实现的。
public class EfDbContext : DbContext
{
public EfDbContext()
{
Database.SetInitializer(new DbInitializer());
// Here the DataDirectory value is assigned from the registry
using (var key = Registry.CurrentUser.OpenSubKey("MyAppKey", true))
{
if (key != null)
{
var dbPath = key.GetValue("DbPath").ToString();
AppDomain.CurrentDomain.SetData("DataDirectory", dbPath);
}
}
}
// other stuff
}
connectionString
中的app.config
是:
<connectionStrings>
<add name="EfDbContext" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\db.mdf;MultipleActiveResultSets=True;Integrated Security=True;Connect Timeout=30" providerName="System.Data.SqlClient" />
</connectionStrings>
我对这个解决方案并不感到自豪,我相信它可以做得更好 - 任何想法如何让它变得更好?