EF实体的通用扩展

时间:2018-08-26 06:13:26

标签: c# entity-framework extension-methods

任务:为实体框架实体编写通用扩展名

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

我花了一些时间研究这个问题,但是并没有太多,这使我相信这是不可能的。

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

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

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

我朝着正确的方向戳将不胜感激。

为清楚起见,我从来没有在教室里花一个小时编程,我是自学成才的,所以如果不可能做到这一点,请回答可以从技术上解释为什么在实体框架中不可能做到这一点。因为我自己找不到任何重要的东西。

2 个答案:

答案 0 :(得分:1)

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

如Bagus tesa所述,做一个interface来引用Entities的共同属性,并用interface来引用Entities并进行扩展。 / p>

我使用的代码,

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;
}

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

答案 1 :(得分:0)

使用此

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