3

ASP.NET 4.0 Webforms アプリで Entity Framework 4 (データベース ファースト アプローチ) を使用しています。

私が基本的に行っていることは、編集するエンティティを my から取得しObjectContext、ユーザーがデータを入力する (または既存のデータを変更する) フィールドを Web フォームに表示することです。

データを保存するときが来たら、Web フォームから値を読み取り、新しいEntityインスタンスを作成します。次に、これが新しいエンティティであるかどうかを検出するジェネリック メソッドを呼び出しAddOrUpdateます (したがって、挿入する必要があります)。 )、または既存のものである場合(したがって、既存のデータを更新する必要があります)。

とを使用する私のメソッドはEntityKey、オブジェクト コンテキストがこのオブジェクトを既に認識しているかどうかを確認します。これは、Microsoft の Cesar de la Torre が彼のブログ投稿で示しているものと非常によく似ています。

public static void AddOrUpdate(ObjectContext context, EntityObject objectDetached)
{
    if (objectDetached.EntityState == EntityState.Detached)
    {
        object currentEntityInDb = null;

        if (context.TryGetObjectByKey(objectDetached.EntityKey, out currentEntityInDb))
        {
            // attach and update the existing entity
        }
        else
        {
            // insert new entity into entity set
            context.AddObject(objectDetached.EntityKey.EntitySetName, objectDetached);
        } 
    }
}

これは問題なく機能しました-最も長い間。context.TryGetObjectByKeyしかし、今日、突然、突然、ステートメントで次のような例外が発生し続けます。

System.InvalidOperationException: ID 'MyEntityType' を持つ型のオブジェクト マッピングが見つかりませんでした

このコアコードで何かを変更したことをまったく思い出せません-エンティティタイプが定義IDされており、に格納されている値EntityKeyは実際にデータベースに存在します...すべてがうまくいくはずです-しかし、それは私に失敗し続けます...

ここで一体何が起こったのですか??

このトピックに関するいくつかのブログとフォーラムの投稿を見つけましたが、実際に私を啓発したり、問題を解決するのに役立つものはありませんでした. 私は何かを台無しにしたに違いありません-悪い-しかし、私は本当に木のために森を見ることができません-何かヒントはありますか?

4

1 に答える 1

1

一般に、この種の問題は、EF がその型を持つアセンブリを見つけられない場合に発生します。完全な例外を確認せずに正確に把握することは困難ですが、最近の変更と EF の使用方法が原因のようです。

EF は通常、コンテキストで ObjectSet を使用してアクセスする必要がある場合、型自体から直接型を選択します。型が呼び出しのコンテキストから利用できないその他のケースでは、呼び出しアセンブリと、呼び出しアセンブリによって参照されるすべての dll が調べられます。それが見つからない場合、エラーメッセージがスローされます。

コンテキストのMetadataWorkspaceでLoadFromAssemblyメソッドを使用できます。

ObjectContext.MetadataWorkspace.LoadFromAssembly(アセ​​ンブリ)。

このようにして、EF は型を探す場所を知ることができます。

于 2014-07-19T17:17:35.777 に答える