0

エンティティからサブエンティティを削除できる汎用メソッドを作成する方法がわかりません。

例:

context.Set<ARC_Records>().Local[0].ARC_Addendum.Remove(object);

ARC_Records私はジェネリックになりたいARC_Addendumので、このメソッドはすべての場合に使用できます。どんなアイデアでも、私はこれが行われたと確信しています.C#のジェネリックに精通していません.

4

1 に答える 1

0

確かに、通常のメソッドからジェネリック メソッドを作成できます。適切な制約を設定する必要があります (ジェネリックの使用が無意味になることがよくあります)。この特定のケースでは、ローカルの ARC_Records エンティティから ARC_Addendum コレクションを選択する一般的な方法が必要です。これは Func デリゲートを介して行うことができます

public static void WeirdMehod<TOne, TMany>(this DbContext context, 
    Func<TOne, ICollection<TMany>> collectionSelector, TMany item)
    where TOne : class
{
    collectionSelector(context.Set<TOne>().Local[0]).Remove(item);
}

使用法:

context.WeirdMethod<ARC_Record, ARC_Addendum>(r => r.ARC_Addendum, obj);

これを DbSet の拡張として作成する場合、型は使用法から推測できます。

db.Set<ARC_Record>().WeirdMehod(r => r.ARC_Addendum, obj);

しかし、ここではジェネリックを使用しても何のメリットもありません。このロジックは、私には一般化の候補とは思えません。

于 2013-10-01T07:19:38.577 に答える