Ну, вопрос не требует пояснений. Так что я не буду излишне расширять его.
Вот мой ИП -
CREATE procedure [dbo].[sp_TotalSalesByCustomerID]
@customer_id nvarchar(50),
@varSale decimal OUTPUT
as
begin
begin try
if exists (
Select * from tempdb..sysobjects Where id =
object_id('tempdb.dbo.#temp')
)
DROP TABLE #temp
else
select * into #temp from Orders where customer_id=@customer_id
select @varSale=SUM(total_price) from #temp
end try
begin catch
select error_message(),
error_severity(),
error_number(),
error_state()
end catch
end
Как видите, SP в основном возвращает только вычисленное значение. Он не сопоставлен ни с каким объектом / классом сущности в моем приложении.
Код C # на моей стороне web-интерфейса бэкэнда, который я написал -
[Route("TotalSalesByCustomerID")]
[HttpPost]
public JsonResult TotalSalesByCustomerID([FromBody]string customer_id)
{
try
{
//var salesT = (_appDbContext.Totals.FromSql("call sp_TotalSalesByCustomerID(@customer_id)", customer_id));
var salesT= _appDbContext.Database.ExecuteSqlCommand("sp_TotalSalesByCustomerID @p0", parameters: new[] { customer_id });
return Json(salesT);
}
catch(Exception exp)
{
return Json(exp.GetBaseException());
}
}
Я не знаю, какой мусор из трески он возвращает. Возможно потому, что он не сопоставлен с объектом класса сущности. Я это понимаю. Вероятно, некоторые из кода C # тоже не так. Мне тоже не нужен отдельный класс. Это всего лишь одно значение! Если я добавлю класс, мне, вероятно, потребуется также выполнить миграцию, а в моем сценарии это не нужно.
Просто для справки, это тоже мой класс построителя миграции, где я добавил свой sql-код в 'Up and' Down '-
protected override void Up(MigrationBuilder migrationBuilder)
{
var sp = @"CREATE procedure [dbo].[sp_TotalSalesByCustomerID]
@customer_id nvarchar(50),
@varSale decimal OUTPUT
as
begin
begin try
if exists (
Select * from tempdb..sysobjects Where id = object_id('tempdb.dbo.#temp')
)
DROP TABLE #temp
else
select * into #temp from Orders where customer_id=@customer_id
select @varSale=SUM(total_price) from #temp
end try
begin catch
select error_message(),
error_severity(),
error_number(),
error_state()
end catch
end";
migrationBuilder.Sql(sp);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
var sp = @"CREATE procedure [dbo].[sp_TotalSalesByCustomerID]
@customer_id nvarchar(50),
@varSale decimal OUTPUT
as
begin
begin try
if exists (
Select * from tempdb..sysobjects Where id = object_id('tempdb.dbo.#temp')
)
DROP TABLE #temp
else
select * into #temp from Orders where customer_id=@customer_id
select @varSale=SUM(total_price) from #temp
end try
begin catch
select error_message(),
error_severity(),
error_number(),
error_state()
end catch
end";
migrationBuilder.Sql(sp);
}
Я не знаю, что делать. Конечно, я упускаю какой-то хороший трюк или хак, который сделает это. Что это? Могу ли я создать какую-то виртуальную / абстрактную сущность, которую я могу просто использовать в EF Core для получения своих данных вместо создания таблиц, добавления миграции и т. Д. В мою БД? Какие еще варианты?
Я с нетерпением жду хорошей помощи в этом.
Спасибо всем,