【发布时间】:2020-11-27 19:33:48
【问题描述】:
我正在使用 Entity Framework Core,当我运行以下查询时,它一切都按预期工作,并从 flasher_equipment 表中选择所有实体。
public async Task<IEnumerable<BaseEquipmentType>> GetNewAvailableEquipment(string tableName)
{
DbSet<BaseEquipmentType> dbSet = _context.Set<BaseEquipmentType>();
IQueryable<BaseEquipmentType> types = dbSet.FromSql($"select * from flasher_equipment");
return await types.ToArrayAsync();
}
但现在,我不想硬编码表名 (flasher_equipment),而是想将其作为参数传递。
我已尝试将代码更改如下:
public async Task<IEnumerable<BaseEquipmentType>> GetNewAvailableEquipment(string tableName)
{
DbSet<BaseEquipmentType> dbSet = _context.Set<BaseEquipmentType>();
IQueryable<BaseEquipmentType> types = dbSet.FromSql($"select * from {tableName}");
return await types.ToArrayAsync();
}
我也试过了
public async Task<IEnumerable<BaseEquipmentType>> GetNewAvailableEquipment(string tableName)
{
DbSet<BaseEquipmentType> dbSet = _context.Set<BaseEquipmentType>();
IQueryable<BaseEquipmentType> types = dbSet.FromSql("select * from {0}", tableName);
return await types.ToArrayAsync();
}
每次出现错误时:
Grpc.AspNetCore.Server.ServerCallHandler[6]
执行服务方法“GetByPlanIdAnImplementation”时出错。 Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-00903: 无效的表名
为什么将表名参数化为参数导致它崩溃?
【问题讨论】:
-
但是为什么要参数化表名呢?你未来的自己正在用一条腿射击自己。
标签: c# sql entity-framework entity-framework-core