通用方法删除C#/ Entity Framework中的子实体

时间:2013-09-19 23:20:52

标签: c# entity-framework generics entity

我无法弄清楚如何创建一个允许我从实体中删除子实体的通用方法。

示例:

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

我希望ARC_RecordsARC_Addendum是泛型,因此可以在所有情况下使用此方法。任何想法,我相信这已经完成,我对C#中的泛型不太熟悉。

1 个答案:

答案 0 :(得分: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);

但我认为这里没有使用仿制药的任何好处。这个逻辑似乎不适合我的推广。