首页 > 解决方案 > 我如何编写自己的 ef 核心函数来操作数据库实体

问题描述

我正在尝试向 ef core 添加一个新的自定义函数,我可以在数据库实体上使用它。

我需要在每个实体上添加我自己的计数实现。

db.xyz.count() does not work for me.

它对我不起作用,因为由于行数太慢。

我想要一个自定义函数,它可以从另一个视图中获取计数。

就像是:

db.xyz.customcount();

我尝试使用 ef 核心扩展方法:

namespace xyz.Helpers
{
    public static class CustomCountExtension:DbContext
    {
        public static int CustomCount() => {....};

    }
}

但是这个函数,我需要它来查询一个不同的视图,该视图存储了每个实体的计数。

。IE

我的观点:

table | row  |
______________

xyz   | n    |

当我调用 xyz.customcount() 时,我需要它返回 table = xyz 的 rowcount。

这可能吗。

有没有更好的实现上述想法?

我在用:

.net 核心 2.1 ef 核心 2.2

标签: c#.netentity-frameworkasp.net-coreef-core-2.0

解决方案


您可以将实体直接映射到您的视图并像表格一样查询它。

public class MyView
{
    public string Table { get; set; }
    public int Row { get; set; }
}

然后将其定义为 aDbQuery而不是DbSet您的DbContext

public virtual DbQuery<MyView> MyView { get; set; }

OnModelCreating()然后在使用方法中将其映射到您的视图,.Query()而不是.Entity()

protected override view OnModelCreating(ModelBuilder modelBulder)
{
    //... Other tables

    modelBuilder.Query<MyView>(query =>
    {
        query.ToView("MyView");
    }
}

推荐阅读