传递| DataDirectory | DAL类库

时间:2017-06-13 19:20:53

标签: c# entity-framework data-access-layer datadirectory

假设我的解决方案中有一个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>

我对这个解决方案并不感到自豪,我相信它可以做得更好 - 任何想法如何让它变得更好?

0 个答案:

没有答案