Создайте один общий c метод, который может обращаться ко многим различным таблицам контекстной базы данных. - PullRequest
0 голосов
/ 13 июля 2020

У меня есть несколько методов с именами вроде:

GetMonsterName
GetTreasureName
GetSpiritName
GetCharacterName

Все они делают примерно одно и то же ... как в этом примере:

public async Task<string> GetMonsterName(long id)
{
    var type = await _context.MonsterType.FindAsync(id);
    return type.Name;
}

Я знаю, что вы можете используйте <T> для общего типа c, но есть ли способ передать общий тип c для таблицы базы данных, к которой мне нужно получить доступ?

, чтобы я мог его использовать вот так?

var type = await _context.<WhateverDatabaseTable>.FindAsync(id);

Чтобы мне не приходилось писать новый метод каждый раз, когда я хотел получить что-то из базы данных?

Спасибо!

1 Ответ

1 голос
/ 13 июля 2020
• 1000 1001 *

простой пример:

public async Task<T> GetAsync<T>(long id) where T : class
{
    var item = await context.Set<T>().FindAsync(id);
    return item;
}

использование этого метода будет таким:

var item = GetAsync<Partner>(123);

Чтобы получить свойство Name, мы должны создать базовый класс, который все сущности принимают как класс ужина:

public class Entity
{
    public string Name { get; set; }
}

измените базовый класс:

public class Device : Entity

и измените нашу функцию generi c на:

public async Task<string> GetAsync<T>(long id) where T : Entity
{
    var item = await context.Set<T>().FindAsync(id);
    return item.Name;
}

и наконец получим имя:

string deviceName = await GetNameAsync<Device>(1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...