2009-07-23 12 views
1

Entity FrameworkおよびC#の使用中にエラーが発生します。ObjectContext.AddObjectをEntity Frameworkで使用するとエラーが発生する

私は、次のようなコードの行で任意の汎用エンティティを保存しようとしています:

objectContextInstance.AddObject(objectToSave.GetType().ToString(), objectToSave) 

私はエラーメッセージがある:

提供のEntitySet名は 修飾する必要がありますEntityContainer名で など、 'EntityContainerName.EntitySetName'、 、またはDefaultContainerNameプロパティ をObjectContextに設定する必要があります。

エンティティデータモデルを確認して、DefaultContainerNameが設定されていることを確認したため、このエラーは分かりません。

誰でもこれをトラブルシューティングする方法に関する提案はできますか? ()

objectContextInstance.AddObject(objectToSave.GetType().Name, objectToSave) 

Type.ToStringをもおそらくのEntitySetの名前ではありません名前空間修飾名を返す:

答えて

4

これを試してみてください。

もちろん、これはエンティティタイプ名とEntitySet名が同じ場合にのみ有効です。これを保証できない場合は、リフレクションを使用して、AddToで始まり、objectToSaveと同じタイプの単一パラメータを取る署名のオブジェクトコンテキストのパブリックメソッドを調べることができます。 (これらのメソッドは、EDMXコードジェネレータによって生成され、エンティティセットとエンティティセットを一致させます)。

もちろん、それは少し遅くなりますが、あなたのものがインサート重データベースでない場合、 t問題。

+0

ありがとうございました!私が理解できないことは、前にWPFアプリケーションで自分の戦略を使用して、単体テストに合格したことです。しかし、今はASP.NET MVCで使用していますが、動作しませんでした。とにかく、ソリューションのおかげで。 – YeahStu

+1

これは動作することが保証されていません。 Typenameは、簡単にEntitySetの名前にすることはできません。これは必要なものです。クレイグの答えは正しい。 –

+0

私はそこに警告を書いて、それが問題であれば回避策を​​提案しました。何をもっとしたいですか? –

2

.NET 4.0を待つか、その間にthis workaroundを使用してください。

0

指定されたエンティティのEntitySetBaseを取得する拡張メソッドが見つかりました。これは、私がEntitySetBaseを派生させるために使用しているものです。自己トラッキングエンティティを使用しています。だから私は、拡張子セクションに.ttファイルにこの機能を入れている:

public static EntitySetBase GetEntitySet(this ObjectContext context, Type entityType) 
    { 
    if (context == null) 
    { 
    throw new ArgumentNullException("context"); 
    } 

    if (entityType == null) 
    { 
    throw new ArgumentNullException("entityType"); 
    } 

    EntityContainer container = context.MetadataWorkspace.GetEntityContainer(context.DefaultContainerName, DataSpace.CSpace); 

    if (container == null) 
    { 
    return null; 
    } 

    EntitySetBase entitySet = container.BaseEntitySets.Where(item => item.ElementType.Name.Equals(entityType.Name)) 
       .FirstOrDefault(); 

    return entitySet; 
    } 

クライアントコードはこのように書き:。

文字列entitySetName = Context.GetEntitySet(user.GetType())の名前。

これが役に立ちます。

関連する問題