0

我正在使用实体框架编写一个 WPF 应用程序,并且我有两个控件,Window 和 UserControl,它们嵌入在 Window 中。UserControl 设计器工作正常,但 Window 设计器返回异常:

The specified named connection is either not found in the configuration, not
intended to be used with the EntityClient provider, or not valid.

UserControl 代码隐藏中的异常点在我创建实体实例的位置。

public partial class Table : UserControl
{
    private MyEntities entity;
    public Table()
    {

        InitializeComponent();
        entity = new MyEntities();
    }
}

当我运行该应用程序时,一切正常。

编辑
我在这里找到了解决方案:WPF 设计器不会加载实体框架,虽然我使用的是 VS2010,前段时间这种方法(在同一个地方创建实体的实例)工作得很好,我不知道是什么坏了它下来。

4

1 回答 1

0

问题很可能在于设计模式中的初始化调用,这就是代码运行良好的原因。

您的实体应基于两个文件:FileName.edmx 和 FileName.Designer.vb(如果使用 C#,则为 .cs)。在设计模式下,Window 会尝试创建 UserControl 的新实例,而后者又会创建 Entity 的新实例(调用 New)。但是,在设计模式下,VS 不会查看保存实体连接字符串的 App.Config 文件(它看起来是调试模式)。因此,当 VS 尝试创建新实体时,实体初始化调用中的一种方法会失败,因为它接收到 Null 连接字符串,因此您会收到错误消息。

一个快速而肮脏的解决方法是手动将连接字符串放入 FileName.Designer.vb (FileName.Designer.cs) 中。如果您打开该文件(您可能必须在解决方案资源管理器中单击“显示所有文件”),在构造函数区域中应该有,

Public Sub New()
MyBase.New("name=Entity"," "Entity")
End Sub

或在 C# 中

public New()
    {
        MyBase.New("name=Entity"," "Entity");
    }

如果您将调用的第一个参数替换为 App.Config 中的连接字符串以获取 MyBase.New(ConnectionStringFromAppConfig," "Entity"),则一切正常。您可能会遇到的一个问题是类似于“不支持关键字”的错误消息:'数据源'。”要解决此问题,您需要将复制的所有连接字符串中的 " 替换为单引号。 " 是 XAML 编码单引号的方式。

希望有帮助。如果有人要提供更优雅的解决方案 - 我将不胜感激。

于 2013-05-23T14:49:28.693 回答