异常“指定的命名连接.与实体客户端提供程序一起使用,或者无效“,同时加载 WPF 设计器

本文关键字:或者 无效 加载 WPF 一起 程序 连接 客户端 实体 异常 | 更新日期: 2023-09-27 18:34:35

我正在使用实体框架编写一个WPF应用程序,我有两个控件,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,前段时间这种方法(在同一位置创建实体实例(工作正常,我不知道是什么破坏了它。

异常“指定的命名连接.与实体客户端提供程序一起使用,或者无效“,同时加载 WPF 设计器

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

实体应基于两个文件:文件名.edmx 和 文件名.设计器.vb(如果使用 C#,则.cs(。在设计模式下,窗口尝试创建 UserControl 的新实例,进而创建实体的新实例(调用 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 方式。

希望有帮助。如果有人能贡献一个更优雅的解决方案 - 我将不胜感激。

相关文章: