Звучит так, будто вы хотите реализовать ActiveRecord в Entity Framework. Многие пытались ... Лучшее, что я могу предложить, это сделать ваш контекст. Свойство элементов чем-то похожим на LINQ, которое запускает контекст, например:
public class MyContext : DbContext
{
QueryableWithContext<Item> Items {get => new QueryableWithContext<Item>(ItemsSet, this)}
private DbSet<Item> ItemsSet {get;set;}
}
public class QueryableWithContext<T>
{
public DbContext Context { get; }
private IQueryable<T> inner;
public QueryableWithContext(IQueryable<T> inner, DbContext context)
{
this.inner = inner;
this.Context = context;
}
public QueryableWithContext<T> Where(Func<T,bool> predicate)
{
return new QueryableWithContext<T>(inner.Where(predicate) as IQueryable<T>, Context);
}
// plus lots of other LINQ-like expressions
}
Тогда ваш метод расширения не на IQueryable<T>
, а на QueryableWithContext<T>
и может получить доступ к свойству Context
.