1

我的大多數實體(並非全部)有兩個屬性,分別爲CompanyIdDeleted。如何爲所有選擇請求自動插入這兩個屬性,而不是在整個應用程序中的每個查詢中手動設置。將條件添加到所有請求EF6

實施例:

db.MyEntity.Where(me => me.Id == 1).Select(me => me.Description) 
  • 檢查動態它的實體具有道具CompanyIdDeleted
  • 案例肯定,變換像這樣

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

  • 案例負,保持相同的選擇查詢。

這將幫助我不得不將這些條件設置爲具有可用屬性的所有查詢。

回答

3

你可以在nuget包的幫助下添加過濾器:EntityFramework.Filters。另外,好的想法是創建一個通用接口,而不是對性能存在動態檢查:

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

用法:

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 
+0

謝謝您的答覆。我選擇了更加成熟一點的[https://www.nuget.org/packages/EntityFramework.DynamicFilters/]。 –