6

ユーザーコントロールを作成しました。このコントロールは、静的な Entity Framework クラスも利用して 2 つのコンボボックスを読み込みます。すべてが順調で、問題なく実行されます。デザインとランタイムは機能しています。次に、アプリケーションを停止すると、UserControl を含むすべてのフォームが設​​計時に機能しなくなります。次の 2 つのエラーが表示されます。

エラー 1: 指定された名前付き接続が構成内に見つからないか、EntityClient プロバイダーでの使用が意図されていないか、無効です。

エラー 2: 変数ccArtikelVeldenが宣言されていないか、割り当てられていません。(ccArtikelVelde は私のものですUserControl)

ランタイムのすべてがまだ機能しています

私の静的EFリポジトリクラス:

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

コンボボックスにデータをロードするために UserControl で発生するいくつかのロジック:

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 部分をコメントアウトして (上記を参照)、再構築することです。非常に奇妙です。すべてが同じアセンブリ、同じ名前空間にあります (簡単にするため)。

誰でもアイデアはありますか?

4

3 に答える 3

9

デザイン モードで何らかの形でデータベース コードを実行しているようです。これを防ぐには、これを引き起こしているコントロールとメソッドを探し出し、次を使用します。

if (DesignMode)
    return

また、データベース コンテキストを静的にキャッシュすることは非常に悪い考えです。マルチスレッドで問題が発生し、挿入と削除を行うときにも問題が発生します。データベース コンテキストは、単一の「作業単位」に使用することを意図しており、2 つ追加し、他の 3 つのオブジェクトを削除して 1 回呼び出しSaveChangesます。

于 2010-03-13T16:09:53.877 に答える
2

私は同じ問題に直面しました、

私の場合、実行時までロードされなかったいくつかのライブラリを使用していたユーザー コントロールのロード イベントにいくつかのデータベース コードを追加しました。

したがって、ユーザー コントロールのロード イベントにデータベース コードを記述しないことをお勧めします。

願っています、これはあなたを助けます!

于 2011-04-07T05:57:22.363 に答える
1

このエラーは、userControl のコンストラクターで関数 "LaadCbx()" を呼び出すと表示されます。

エンティティ フレームワークの初期化がこの関数に存在するためです。

解決策は、親フォームのコンストラクターでこの関数「LaadCbx()」を呼び出すことです。

于 2015-11-08T18:29:58.877 に答える