EF 实体的通用扩展

Generic extension for EF entities

任务: 为 Entity Framework 个实体编写通用扩展

我不确定这是否可能,因为每个实体通常会有不同的属性,但我有一组实体共享一些共同的属性,我想知道这是否可能构建通用扩展,而不必总是为每个实体编写相同的代码。

我花了一点时间研究这个,但没有太多,这让我相信这是不可能的。

无论如何,与我更好的判断相反,我将在 Whosebug 上问一个愚蠢的问题。

这就是我的想法,但显然是一个不可编译的示例,但至少你会明白这个想法。

public static List<TEntity> Generic<TEntity>(this DbContext db, string name)
{
    return db.TEntity.Where(s => s.Name == name);
}

戳对方向不胜感激

为了清楚起见,我从来没有在课堂上花过一个小时来编程,我是自学的,所以如果不可能做到这一点,答案能否解释请从技术上解释为什么这不可能Entity Framework。因为我自己找不到任何实质性的东西。

感谢@Bagus Tesa,我能够解决这个问题。

正如 Bagus tesa 所说,制作一个 interface 来引用 Entities 的共同属性,并用 Entities 引用 interface 并以此方式进行扩展.

我用的代码,

public static IQueryable<IFilterEntity> FilterEntity(this BaseViewModel vm,
 IQueryable<IFilterEntity> list)
{
    return list.Where(s => s.Name == vm.name && 
                           s.DateMonth == vm.Month &&
                           s.DateYear == vm.Year);
}

界面,

public interface IFilterEntity
{
    string Name { get; set; } 

    int? DateYear { get; set; }

    int? DateMonth { get; set; }
}

BaseViewModel,

public class BaseViewModel
{      
    string Name => RootVm.Name;

    int? DateYear => RootVm.SelectedDate.Month;

    int? DateMonth => RootVm.SelectedDate.Month;
}

感谢您的帮助。我希望这对其他人有帮助。

使用这个

public IEnumerable<TEntity> Filter(Expression<Func<TEntity, bool>> filter, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null)
            {
db.Set<TEntity>().AsNoTracking().AsQueryable().Where(filter);}