Как я могу написать свою собственную базовую функцию ef, которая работает с базой данных - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь добавить новую пользовательскую функцию в ядро ​​ef, которую я могу использовать в объектах базы данных.

Мне нужно добавить собственную реализацию count для каждой сущности.

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

Myview:

table | row  |
______________

xyz   | n    |

, когда я вызываю xyz.customcount (), мне нужно, чтобы он возвращал rowcount, где table = xyz .

возможно ли это.

Есть ли лучшее воплощение вышеуказанной идеи?

Я использую:

. net core 2.1 ef core 2.2

1 Ответ

0 голосов
/ 17 апреля 2020

Вы можете сопоставить сущность непосредственно с вашим представлением и запросить его как таблицу.

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

Затем определите его как DbQuery вместо DbSet в вашем DbContext:

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

Затем сопоставьте его с вашим View в методе OnModelCreating(), используя .Query() вместо .Entity():

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

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