WPF应用程序忽略AppDomain.CurrentDomain.SetData值

时间:2013-12-19 22:12:07

标签: c# .net entity-framework-5 connection-string localdb

我有一个解决方案(所有.NET 4.5项目),它有一个Windows服务,一个WPF UI应用程序和一个数据层,我有我的EDMX模型和通用存储库。

当我调试服务时,数据最终会在数据库中出现,我希望UI在启动时使用相同的数据库文件。

所以我创建了一个这样的目录:

[solution root directory]\Data

我将MDF和LDF放入其中。我确保我的EDMX模型在进行更新时使用此MDF文件。

对于服务和UI使用相同的MDF文件,我确保他们的连接字符串使用|DataDirectory|符号并在它们都启动时执行此操作:

public MainWindow()
{
    string dataDir = Utilities.Utilities.ReturnDataDirectory(System.Reflection.Assembly.GetExecutingAssembly());
    AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
    InitializeComponent();
    Loaded += MainWindow_Loaded;
}

以下是ReturnDataDirectory的代码:

public static string ReturnDataDirectory(Assembly referingAssembly)
{
    string curDir = referingAssembly.Location;
    string dataDir = string.Empty;
    int x;
    var curDirArray = curDir.Split('\\');

    //Return a directory without the 'Solution.Name\bin\Debug' part...
    for (x = 0; x < (curDirArray.Count() - 4);x++ )
    {
        dataDir += string.Format("{0}\\", curDirArray[x]);
    }

    return string.Format("{0}Data", dataDir);
}

这会生成MDF文件确实存在的确切目录,因此问题不存在,AFAIK。

然而,当我启动WPF UI时,我收到此错误:

An attempt to attach an auto-named database for file C:\\Dropbox\\My Docs\\MySolution\\MySolution.UI\\bin\\Debug\\MySolution.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.

为什么在正确设置|DataDirectory|之后仍在尝试查看?反正没有MDF文件,这就是我目前的意图。

以下是WPF UI ap:

的app.config中使用的连接字符串
<add name="MySolutionEntities" connectionString="metadata=res://*/MySolution.csdl|res://*/MySolution.ssdl|res://*/MySolution.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\MySolution.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

我错过了什么?

谢谢!

编辑:此方法适用于Windows服务项目,但不适用于WPF UI应用程序。是因为我设置|DataDirectory|为时已晚?我也尝试使用Process Monitor嗅探一些东西,我无法获取尝试访问MDF的UI应用程序:(

1 个答案:

答案 0 :(得分:0)

原来我的预感是正确的。在WPF UI应用程序中,我在此过程中设置|DataDirectory|太晚了。

This解决了这个问题。