在 C#/实体框架中删除子实体的泛型方法
本文关键字:实体 泛型方法 删除 框架 | 更新日期: 2023-09-27 18:32:08
我无法弄清楚如何创建一个通用方法,允许我从实体中删除子实体。
例:
context.Set<ARC_Records>().Local[0].ARC_Addendum.Remove(object);
我希望ARC_Records
和ARC_Addendum
是泛型的,因此此方法可以在所有情况下使用。任何想法,我相信这已经完成了,我只是不太熟悉 C# 中的泛型。
当然,
您可以从任何普通方法创建泛型方法。您只需要放置适当的约束(这通常会使泛型使用毫无意义)。在这种特殊情况下,您需要通用方法来从本地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);
但是我在这里看不到泛型使用的任何好处。在我看来,这种逻辑似乎不适合概括。