WinForm添加用户控件提示找不到App.Config中RgaAppDBEntities连接字符串如何解决
WinForm设计器加载绑定EF的用户控件时找不到连接字符串问题说明与修复
问题描述
使用Entity Framework 6和DevExpress UI组件开发WinForms应用,平稳开发2个月后,在主窗口新增用户控件时,主窗口设计器弹出多道异常报错,点击「忽略并继续」后出现以下问题:
- 设计器自动移除了2个已接入Entity Framework的自定义用户控件
- 尝试将用户控件重新添加到设计器时,弹出报错提示无法创建组件,且无法在应用配置文件中找到连接字符串
排查过程
经定位,无法添加用户控件的原因是两个故障用户控件内部会创建数据库模型的RgaAppDBEntities实例。
数据模型存放在独立的类库项目中,类库和WinForms项目的App.Config均已正确配置连接字符串:
<connectionStrings> <add name="RgaAppDBEntities" connectionString="sensitive connection string information generated from database first model" providerName="System.Data.EntityClient" /> </connectionStrings>
DbContext类的构造函数代码如下:
public RgaAppDBEntities() : base("name=RgaAppDBEntities") { }
若去掉构造函数中的name=前缀,会抛出UnintentionalCodeFirstException,确认WinForms项目确实无法从配置文件中找到对应名称的连接字符串。即使完全删除原有数据模型,重新生成整个模型和相关逻辑,问题仍未解决。
问题诱因
Entity Framework在设计时模式下会拒绝读取App.config配置文件,本次故障场景中,用户控件的ViewModel构造函数在设计器加载阶段就会被触发执行,此时初始化数据库上下文就会因找不到连接字符串抛出异常。
修复方案
调整数据库上下文初始化逻辑,不要在用户控件或ViewModel的构造函数中直接初始化DbContext,单独编写仅在运行时调用的数据库上下文初始化方法,避免设计时阶段触发EF配置读取逻辑即可解决问题。
内容的提问来源于stack exchange,提问作者EricNie
相关产品推荐
相关产品推荐

