述語を傍受して変更できる必要があります。
1。リポジトリを抽象化した場合は、次のようにすることができます。
すべてのエンティティは、Abstract クラスまたは Interface with and Active プロパティから継承でき、コードは次のようになります。
interface IActivatable {
bool IsActive {get;set;}
}
class Repository<EntityType>
where EntityType : class, IActivatable {
private StackOverflowEntities context;
public IQueryable<EntityType> GetAll() {
return context.Set<EntityType>().Where(e => e.IsActive == false);
}
}
そうすれば、GetAll は最初の述語で IQueryable を返し、残りは AND で追加されます。そのようです:
Repository<Person> persons;
var results = persons.GetAll().Where(p => p.IsMarried == false);
述語は次のようになりますp.IsMarried == false && p.IsActive == false
二。リポジトリ コードまたはコードをまったく変更することが実際的でない場合は、すべてのテーブルのビューを作成できます。ビューでは、where 句に IsActive を含めてレコードを除外し、それらのビューに基づいて EDMX をリロードすることができます。
編集:
三。生成された DbContext がクライアント コードに公開されている場合は、次のようにすることができます。
public partial class StackOverflowEntities : DbContext
{
public StackOverflowEntities()
: base("name=StackOverflowEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public DbSet<Blog> Blogs {
return this.Set<Blog>().Where(b => b.IsActive == false);
}
}
自動コード生成をオフにするか、T4 テンプレートを変更する必要があることを意味します。生成されたコードを取得し、gen をオンにして変更する方が簡単です。