c# - 我如何编写自己的 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
解决方案
您可以将实体直接映射到您的视图并像表格一样查询它。
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");
}
}
推荐阅读
- java - 无效令牌不包含资源 id (oauth2-resource)
- c - 如何优化此代码以缩短运行时间?
- mongodb - 用于海量数据的 MongoDB
- c++ - C++ 语法解释中的赋值运算符重载
- javascript - 回调被多次触发,我不知道为什么
- python - pip 已安装模块但 python 给出导入错误
- java - java opencv Features2d.drawMatches - 断言失败或 NullPointerException
- javascript - PHP 和 Vue 集成
- hibernate - Hibernate 映射一个 Map (HashMap) 总是添加新行而不是更新
- javascript - 动态更改关键帧后如何重新启动更新的动画?