C# 创建一个可以访问多个不同上下文数据库表的通用方法
我有很多方法,它们的名称如下:C# 创建一个可以访问多个不同上下文数据库表的通用方法,c#,asp.net-core,entity-framework-core,asp.net-core-3.1,C#,Asp.net Core,Entity Framework Core,Asp.net Core 3.1,我有很多方法,它们的名称如下: GetMonsterName GetTreasureName GetSpiritName GetCharacterName 他们都做了几乎相同的事情…就像这个例子: public async Task<string> GetMonsterName(long id) { var type = await _context.MonsterType.FindAsync(id); return type.Name; } 公共异步任务名称(长
GetMonsterName
GetTreasureName
GetSpiritName
GetCharacterName
他们都做了几乎相同的事情…就像这个例子:
public async Task<string> GetMonsterName(long id)
{
var type = await _context.MonsterType.FindAsync(id);
return type.Name;
}
公共异步任务名称(长id)
{
var type=wait_context.MonsterType.FindAsync(id);
返回类型.名称;
}
我知道您可以对泛型返回类型使用
,但是是否有一种方法也可以为我需要访问的数据库表传递泛型类型
这样我就可以像这样使用它
var type = await _context.<WhateverDatabaseTable>.FindAsync(id);
var type=await\u context..FindAsync(id);
这样我就不必每次都要从数据库中获取新的方法了
谢谢 我自己通常使用一个通用数据访问类(类似于存储库)来消除重复代码,这里的一个主要EF函数是Set方法,它按实体提供表通用参数: 一个简单的例子是:
public async Task<T> GetAsync<T>(long id) where T : class
{
var item = await context.Set<T>().FindAsync(id);
return item;
}
更改基类:
public class Device : Entity
并将通用函数更改为:
public async Task<string> GetAsync<T>(long id) where T : Entity
{
var item = await context.Set<T>().FindAsync(id);
return item.Name;
}
公共异步任务GetAsync(长id),其中T:Entity
{
var item=await context.Set().FindAsync(id);
返回项目名称;
}
最后得到名字:
string deviceName = await GetNameAsync<Device>(1);
string deviceName=wait GetNameAsync(1);
谢谢,但您将如何使用此功能?比如,如果我想将它用于一个名为MonsterType的数据库表?谢谢,但我需要从任何对象获取“Name”属性……比如“item.Name”
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);