过滤所有查询(尝试实现软删除)我正在尝试在EFCore2.0中实现软删除行为。公共接口ISoftDeleteModel{boolIsDeleted{get;放;创建了正确的列并且软删除工作正常,但DbContext中的过滤实体不是。我想在上下文中使用查询过滤,但我被卡住了。protectedoverridevoidOnModelCreating(ModelBuildermodelBuilder){类型实体类型;//^^^它包含实体类型,例如。博客、帖子等使用//modelBuilder.Model.GetEntityTypes().First().Name并转换为类型varentity=modelBuilder.Entity(entityType);if(entityType.GetInterface("ISoftDeleteModel")!=null){//???如何访问IsDeleted属性???entity.HasQueryFilter(x=>!x.IsDeleted);}}问题很简单——如何访问IsDeleted属性?如果我知道实体的类型,例如。由Post和Post实现的ISoftDeleteModel我可以这样做:但我不知道类型。我正在尝试实现一些简单的事情——所有实现这个接口的模型都会被自动过滤。我错过了什么吗?无法测试确切的API,但一般方法是创建一个受约束的泛型方法并通过反射调用它:调用(空,新对象[]{modelBuilder});}staticreadonlyMethodInfoSetSoftDeleteFilterMethod=typeof(EFFilterExtensions).GetMethods(BindingFlags.Public|BindingFlags.Static).Single(t=>t.IsGenericMethod&&t.Name=="SetSoftDelete;publicFilter")staticvoidSetSoftDeleteFilter(这个ModelBuildermodelBuilder)其中TEntity:class,ISoftDeleteModel{modelBuilder.Entity().HasQueryFilter(x=>!x.IsDeleted);现在你可以在你的OnModelCreating中使用这样的东西:以上是C#学习教程:过滤所有查询(尝试实现软删除)并共享所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注—foreach(vartypeinmodelBuilder.Model.GetEntityTypes()){if(typeof(ISoftDeleteModel).IsAssignableFrom(type.ClrType))modelBuilder.SetSoftDeleteFilter(类型.ClrTy体育);}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
