Мне нужно прочитать результат из хранимой процедуры, вызванной из EF Core, которая включает в себя вещи, предназначенные для целей форматирования электронной таблицы, такие как строки с только нулевыми значениями.Мой код в основном работает, но есть два столбца, которые приводят к сбою запроса, когда я их включаю.
Вот мой класс модели (для краткости включены только несколько подпорок):
public class StoredProcRecord
{
[Column("Prod Line")]
public string ProductLine { get; set; }
[Column("Current Sales")]
public decimal? CurrentSales { get; set; }
[Column("Current Margin $")]
public decimal? CurrentMargin { get; set; }
}
Вот фрагмент части вывода, если я запускаю хранимую процедуру из SQL Server Management Studio:
Вот как я зарегистрировал тип какмодель сущности с EF Core в контексте db:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Query<StoredProcRecord>();
}
Вот как я вызываю хранимую процедуру:
return _context.Query<StoredProcRecord>().FromSql("EXECUTE my_stored_proc").ToList();
В этом примере EF Core всегда выдает исключение при попыткепозвонить FromSql()
с сообщением:
В результатах операции «FromSql» отсутствует обязательный столбец «Current Margin $».
Согласнодо EF Core docs , если столбец обнуляем, то это не требуется.Тем не менее, я получаю исключение, которое требует "Текущий марж $".Это также происходит только со свойством CurrentMargin
, а не со свойством CurrentSales
, которое использует тот же тип.Если я удаляю CurrentMargin
, все работает нормально, и мне просто не хватает этого одного свойства.
Я попытался использовать [Column(Order = 2)]
вместо именованного столбца, думая, что, возможно, знак доллара в имени столбцаимел к этому какое-то отношение, но это приводит к:
Требуемый столбец 'CurrentMargin' не присутствовал в результатах операции 'FromSql'.
Включаяи порядок, и имя приводят к одному и тому же типу ошибки.
Стоит отметить, что это не хранимая процедура, к которой у меня есть возможность вносить обновления.
Чем отличается CurrentMargin
свойство по сравнению с CurrentSales
, что приводит к его провалу, как это?Есть ли какой-то особый способ обработки знака доллара в названии столбца?Я что-то упустил полностью?
Редактировать:
Вот фрагмент из самого конца хранимой процедуры, где выводится полученная таблица.Я включил это, чтобы показать, что «Current Margin $» действительно является одним из имен столбцов.Я фактически скопировал / вставил прямо из хранимой процедуры, чтобы убедиться, что не набрал неверно имя столбца.
BEGIN
-- bulk of stored procedure that builds #tmp_tbl omitted for length
SELECT
'Prod Line' = pl_key,
'Current Sales' = curr_sales,
'Current Margin $' = curr_margin
FROM #tmp_tbl
END