【问题标题】:Why Can't I Use My DbContext Type?为什么我不能使用我的 DbContext 类型?
【发布时间】:2015-07-21 01:58:29
【问题描述】:

我想在 WPF 窗口中访问我的 DbContext 类型的一些静态属性。我认为我可以使用与引用单个实体相同的 XAML:

    <Window.Resources>
        <entity:Account x:Key="account"/> //Works fine
        <entity:MyEntities x:Key="myEntities"/> //Throws an error!
    </Window.Resources>

我得到这个错误:

在应用程序配置文件中找不到名为“MyEntities”的连接字符串。

为什么它对待 DbContext 类型 (MyEntities) 与 Account 实体不同?有没有一种简单的方法可以访问 MyEntities 类型的静态属性?

【问题讨论】:

  • 听起来您在 WPF app.config 中缺少 MyEntities 的连接字符串。
  • 错误信息非常明确。似乎在您的应用程序配置文件中,您没有名为 MyEntities! 的连接字符串
  • 我确实有一个连接字符串(我有三个!)。没有那一行,我的应用程序运行得很好。

标签: wpf entity-framework


【解决方案1】:

您使用的语法是用于创建实例,而不是静态属性。如果要访问静态属性,则需要使用 x:Static 标记扩展

<Window.Resources>
    <entity:Account x:Key="account" SomeProperty={x:Static entity:MyEntities.MyProperty}/>
</Window.Resources>

上面的 xaml 类似于 C# 代码

var account = new Account()
{
     SomeProperty = MyEntities.MyProperty
};
this.Resources["account"] = account;

看到你正在调用new Account(),如果你调用了new MyEntites()(就像你原来的例子一样)你会得到你得到的错误。

【讨论】:

  • Account 是 MyEntities 上下文中的一个实体,因此不需要/不需要连接字符串。正如我在原始问题的 cmets 部分所说,应用程序连接良好,并且“MyEnities”WPF 行(添加以简单地访问我添加到 DbContext 类型的一些静态属性)是唯一会产生错误的东西。跨度>
  • @RandallDoser 更新了答案,抱歉我误解了。
  • 谢谢。我喜欢这段代码,因为我从中汲取了一些新的东西,但是,这实际上会产生类似的错误。但是,该错误是 WPF 错误之一,它不会停止应用程序的编译/运行,并且当我运行它时,您的 XAML 会按预期工作。我认为这个问题实际上是我在 DbContext 类型上创建的静态属性之一,它建立了我的长期运行上下文。它必须与 Visual Studio 在设计时尝试解析此属性并且无法在配置文件中找到连接字符串(无论出于何种原因)有关。感谢您的帮助!
  • 并没有真正回答我的问题,尽管您的 XAML 代码更加优雅,并且错误的细微变化帮助我弄清楚发生了什么。查看我发布的答案...
【解决方案2】:

似乎由于我放置在 DbContext 中的静态构造函数导致了特定错误。当我删除静态构造函数时,错误变为:

对象引用未设置为对象的实例。

事实证明,最初的错误并没有阻止我编译或运行我的应用程序。我更改了我的代码以使用 Scott Chamberlain 的建议(这会产生类似的可忽略的错误),因为它更简洁,而且我可以访问 DbContext 上的静态属性,尽管有 Visual Studio 的抱怨。谢谢大家的帮助和建议。

【讨论】:

    猜你喜欢
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    相关资源
    最近更新 更多