相关疑难解决方法(0)

过滤所有查询(尝试实现软删除)

我试图在EF Core 2.0中开展软删除行为.

public interface ISoftDeleteModel
{
    bool IsDeleted { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

创建正确的列和软删除工作正常,但DbContext中的过滤实体不是.

我想在上下文中使用查询过滤,但我被卡住了.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    Type entityType;
    // ^^^ it contains type of entity, eg. Blog, Post, etc. using
    // modelBuilder.Model.GetEntityTypes().First().Name and converting to Type

    var entity = modelBuilder.Entity(entityType);
    if(entityType.GetInterface("ISoftDeleteModel") != null)
    {
        // ??? how to access IsDeleted property ???
        entity.HasQueryFilter(x => !x.IsDeleted);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题很简单 - 如何访问IsDeleted属性?

如果我知道实体的类型,例如.Post和Post实现的ISoftDeleteModel我可以这样做:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Post>().HasQueryFilter(x => !x.IsDeleted);
}
Run Code Online (Sandbox Code Playgroud)

但我不知道这种类型.我试图实现简单的事情 - 所有实现此接口的模型都将被自动过滤.我错过了什么吗?

c# entity-framework entity-framework-core .net-core

6
推荐指数
1
解决办法
2457
查看次数

实体框架核心2.1,ChangeTracker.Tracked

我正在试图弄清楚如何使用Entity Framework Cores 2.1新的ChangeTracker.Tracked事件来挂钩阅读查询.不幸的是,我无法理解如何实现这一点.由于它是一项新功能,因此无法在其上找到任何文章,官方Microsoft文档网站也不提供任何帮助或示例代码.我的场景非常简单.我有一个包含以下列的数据库: id,customerId,metadata. 当用户查询此表时,我想拦截查询结果集,对于每一行,我想将customerId与当前登录的用户进行比较.我希望ChangeTracker.Tracked事件可以帮助我拦截返回结果集.我正在寻找一些关于如何实现上述的示例代码.

entity-framework-core

3
推荐指数
1
解决办法
1455
查看次数