UserControl中的EF无法看到app.config?

我刚刚创建了一个用户控件。 此控件还使用我的静态Entity Framework类来加载两个combobox。 一切都很好,运行没有问题。 设计和运行时正在运行。 然后,当我停止应用程序时,包含我的UserControl的所有表单在设计时间不再起作用。 我只看到两个错误:

错误1:在配置中找不到指定的命名连接,不打算与EntityClient提供程序一起使用,或者无效。

错误2:变量ccArtikelVelden未声明或从未分配过。 (ccArtikelVelde是我的UserControl

运行时一切仍然有效

我的静态EF Repositoy类:

 public class BSManagerData { private static BSManagerEntities _entities; public static BSManagerEntities Entities { get { if (_entities == null) _entities = new BSManagerEntities(); return _entities; } set { _entities = value; } } } 

我的UserControl中发生了一些逻辑,用于加载combobox中的数据:

 private void LaadCbx() { cbxCategorie.DataSource = (from c in BSManagerData.Entities.Categories select c).ToList(); cbxCategorie.DisplayMember = "Naam"; cbxCategorie.ValueMember = "Id"; } private void cbxCategorie_SelectedIndexChanged(object sender, EventArgs e) { cbxFabrikant.DataSource = from f in BSManagerData.Entities.Fabrikants where f.Categorie.Id == ((Categorie)cbxCategorie.SelectedItem).Id select f; cbxFabrikant.DisplayMember = "Naam"; cbxFabrikant.ValueMember = "Id"; } 

使表单再次工作的唯一方法是设计时间,即在UserControl中注释掉EF部分(见上文)并重建。 这很奇怪,一切都在同一个程序集中,相同的命名空间(为了简单起见)。

有人有想法吗?

看起来你在设计模式下以某种方式执行数据库代码。 为了防止这种情况,请搜索引起此问题的控件和方法,并使用:

 if (DesignMode) return 

此外,静态缓存数据库上下文是一个非常糟糕的主意。 它会导致multithreading问题,以及进行插入和删除时的问题。 数据库上下文用于单个“工作单元”,添加2,删除3个其他对象并调用SaveChanges一次。

我遇到了同样的问题,

在我的例子中,我在用户控件加载事件中添加了一些数据库代码,这些代码使用了一些库,这些库在运行时才加载。

因此,建议不要在用户控件加载事件中编写任何数据库代码。

希望,这对你有所帮助!

如果在userControl的构造函数上调用函数“LaadCbx()”,则会显示此错误。

因为entity framework上的初始化存在于此函数中。

解决方案是在父窗体的构造函数中调用此函数“LaadCbx()”。