我正在通过网络api调用来更新我的表,并向其传递字段,Id和值。
我想允许参数“值”可以为空,或者可以是任何类型(整数,字符串,日期),因此它是通用的。
问题出在api中的行:
await financeService.UpdateAsync(fieldToPascal, dbValue, id);
错误:
错误CS0411无法从用法中推断出方法'IFinanceService.UpdateAsync(string,T ?, int)'的类型参数。尝试显式指定类型参数。
我是泛型新手,不确定为什么指定的参数无效?为了允许将通用的可为null的类型传递给我的服务,我必须进行哪些更改?谢谢。
Web API
[Route("update/{field}/{id}/{value?}")]
[HttpPost]
public async Task<HttpResponseMessage> UpdateAsync(string field, int id, string value = null)
{
string fieldToPascal = StringExtensions.FirstCharToUpper(field);
object dbValue = value;
if (DateTime.TryParseExact(value, "dd-MM-yy", new CultureInfo("en-GB"), DateTimeStyles.None, out DateTime date)) {
dbValue = date;
}
await financeService.UpdateAsync(fieldToPascal, dbValue, id);
return Request.CreateResponse(HttpStatusCode.OK, true);
}
服务层
public async Task UpdateAsync<T>(string field, T? value, int id) where T : struct
{
await FinanceRepository.UpdateAsync(field, value, id);
}
Dapper回购
public async Task UpdateAsync<T>(string field, T? value, int id) where T : struct
{
using (var sql = dbConnectionFactory())
{
await sql.ExecuteAsync($@"
UPDATE {TABLE} SET {field} = @value WHERE Id = @id",
new
{
value,
id
}
);
}
}