Adding Where Condition to All Requests EF6

人盡茶涼 提交于 2019-12-01 20:33:45

问题


Most of my entities (not all) have two properties called CompanyId and Deleted. How would be possible to auto insert these two properties for all select requests instead of setting manually on every single query I have along the whole app.

Example:

db.MyEntity.Where(me => me.Id == 1).Select(me => me.Description)
  • Check dynamically it the entity has the props CompanyId and Deleted.
  • Case affirmative, transform it like this

db.MyEntity.Where(me => me.Id == 1 && Deleted == false && CompanyId == 1).Select(me => me.Description)

  • Case negative, keep the same select query.

It would help me having to set these conditions to all my queries in which has the properties available.


回答1:


You can add filter with the help of nuget package: EntityFramework.Filters. Also, good idea is to create common interface instead of dynamically checking for properties existence:

public interface IMyEntityInterface
{
    public int Id {get;set;}
    public bool Deleted {get;set;}
}

public class MyEntity : IMyEntityInterface
{
    public int Id {get;set;}
    public bool Deleted {get;set;}
    //other stuff
}

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{   
    modelBuilder.Conventions
       .Add(FilterConvention.Create<IMyEntityInterface, int, bool>("MyFilter", (entity, Id, Deleted) => entity.Id == Id && entity.Deleted == Deleted);
}

Usage:

var filter = db.EnableFilter("MyFilter");
filter.SetParameter("Id", 1);
filter.SetParameter("Deleted", false);

var data = db.MyEntity.Where(me => me.CompanyId == 1).Select(me => me.Description);
//select Description from MyEntities where Id = 1 and Deleted = false and CompanyId = 1


来源:https://stackoverflow.com/questions/41154894/adding-where-condition-to-all-requests-ef6

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!