添加所有请求的条件EF6 [英] Adding Where Condition to All Requests EF6

查看:169
本文介绍了添加所有请求的条件EF6的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的大多数实体(不是全部)有两个属性名为 CompanyId 已删除。如何自动为所有选择请求自动插入这两个属性,而不是在整个应用程序中的每个单个查询上手动设置。



示例:

  db.MyEntity.Where(me => me.Id == 1).Select(me => me.Description)




  • 动态检查实体有道具 CompanyId 已删除

  • 案例肯定,像这样转换



    • db.MyEntity.Where(me => me.Id == 1&& Deleted == false&& CompanyId == 1)。选择(me => me.Description




      • 案例否定,保持相同的选择查询



      这将有助于我将这些条件设置为具有可用属性的所有查询。

      解决方案

      您可以在nuget软件包的帮助下添加过滤器: EntityFramework.Filters 。此外,好的主意是创建通用界面,而不是动态检查属性的存在:

        public interfece IMyEntityInterface 
      {
      public int Id {get; set;}
      public bool删除{get; set;}
      }

      public class MyEntity:IMyEntityInterface
      {
      public int Id {get; set;}
      public bool Deleted {get; set;}
      //其他东西
      }

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

      用法:

        var filter = db.EnableFilter(MyFilter); 
      过滤器。 SetParameter(Id,1);
      filter.SetParameter(Deleted,false);

      var data = db.MyEntity.Where(me => me.CompanyId == 1).S选(我=> me.Description);
      //从MyEntities中选择描述,其中Id = 1和Deleted = false,CompanyId = 1


      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.

      解决方案

      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 interfece 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
      

      这篇关于添加所有请求的条件EF6的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆