В моем приложении ASP.NET Core v2.1 у меня есть следующее:
// beginDate and endDate are .NET DateTime types
var beginDateParam = new NpgsqlDate(beginDate);
var endDateParam = new NpgsqlDate(endDate);
var result = await _reportDb.ReportRows
.FromSql(
"SELECT * FROM \"fnReport\"(@p0, @p1);",
new object[] { beginDateParam, endDateParam
})
.AsNoTracking().ToListAsync();
Параметры функции fnReport относятся к типу даты PostgreSQL.До этого, Npgsql v2.1 выше код работал.Теперь после обновления выдается ошибка: «Невозможно найти сопоставление реляционному типу для типа CLR« NpgsqlDate »».
Без NpgsqlDate ошибка будет: «function fnReport (отметка времени без часового пояса»)., метка времени без часового пояса) не существует ".
Я знаю, что рекомендуется использовать библиотеку NodaTime.Но использование библиотеки NodaTime требует значительных изменений кода ( см. Эту проблему ).
Поскольку мои требования к datetime довольно просты, я могу изменить типы аргументов fnReport на тип данных timestamp, иэто будет работать.
Однако у меня есть объект со следующим свойством:
[Column(TypeName = "date")]
[DataType(DataType.Date)]
public DateTime EntryDate { get; set; }
И для этого объекта операции CRUD работают нормально.У меня вопрос, почему Npgsql / EF Core может это сделать, но не может выполнить функцию с параметрами типа даты?