0

このコードが提供された場所で以前の質問をしました:

public void AddRecord<T>(params T[] items) where T : class
{
    var set = Set<T>();
    foreach (var item in items)
        set.Add(item);
}

さて、これは素晴らしいことですが、別のメソッド内からこのメソッドを呼び出したいと思います。レコードを追加または更新する必要があるかどうかを判断できる場所。

私はこれを試しました:public void AddNewRec(Object entity, bool add)ただし、例外がスローされます: entity type Object is not part of the model for the current context。何が起こっている?ラッパーメソッドでエンティティに必要なパラメーターの型は何ですか? 混乱している。

4

1 に答える 1

2

何が起こっているかというと、entityパラメータのタイプがObjectであるため、それをジェネリックAddRecord<T>メソッドに渡すと、 にTなりObjectます。次に、そのメソッド内で にSet<T>()なりSet<Object>()Objectはエンティティ タイプの 1 つではないため、コンテキストはDbSetそれに対する を見つけることができず、barfs します。

:tryAddNewRecを渡す代わりに、メソッドをジェネリック メソッドに変更することで、動作させることができるはずです。これにより、エンティティ タイプをメソッドに絞り込むことができます。ObjectAddNewRec<T>(T entity, bool add) where T : classAddRecord<T>

于 2013-10-30T14:20:50.363 に答える