У меня бесконечная проблема с попыткой вызова хранимой процедуры из контроллера - если бы я мог, я бы добавил к этому вознаграждение, так как это заняло слишком много времени, и я не знаю, что ещеделать (но у меня нет очков).Основываясь на моих исследованиях, кажется, что это известная ошибка, но не обходные пути для меня сработали, поэтому я постараюсь объяснить, в надежде найти решение:
1 - я создаю хранимую процедуру, которая выглядитчто-то вроде этого:
CREATE PROCEDURE [dbo].[db_name]
@start_dt datetime,
@end_dt datetime
AS
BEGIN
SET FMTONLY OFF;
SELECT [date],
COUNT(visits) as Visits,
SUM(CASE entrance WHEN '1' THEN 1 ELSE 0 END) AS ENT1,
SUM(CASE entrance WHEN '2' THEN 1 ELSE 0 END) AS ENT2,
SUM(CASE entrance WHEN '3' THEN 1 ELSE 0 END) AS ENT3,
SUM(CASE entrance WHEN '4' THEN 1 ELSE 0 END) AS ENT4,
SUM(CASE entrance WHEN '5' THEN 1 ELSE 0 END) AS ENT5
FROM some_view
WHERE [date] between @start_dt and @end_dt
group by [date]
END
2 - Затем я вручную создал объект сущности LINQ to SQL, который имеет свойство для каждого из возвращенных столбцов (Date, Visits, ENT1, ENT2 ... ENT5).
3 - Я попытался перетащить сохраненный процесс как функцию на указанный объект сущности в конструкторе VS - но он не позволил мне, так как он говорит, что «возвращенная схема не соответствует целевому классу».Поэтому я просто перетащил его в другое место, и была создана функция (я даже изменил тип возвращаемого значения на объект, но не работал, см. Ниже).
** ПРИМЕЧАНИЕ. Я считаю, что Visual Studio считает, что хранимая процедура возвращаетInt - не таблица ожидаемых значений.** Предложенное исправление для этого типа проблемы состояло в том, чтобы создать фиктивную хранимую процедуру, которая имеет только простую инструкцию выбора, и заменить ее после перетаскивания на объект, но она не работала либо
4 - я пыталсявсе, что я мог придумать в контроллере, например, попытка вернуть IMultipleResults при вызове хранимого процесса и преобразование его в объект модели без какого-либо успеха.
Основная проблема заключается в том, что возвращаются не строки, а только int.
Заранее спасибо за ЛЮБУЮ помощь!Я новичок в MVC, поэтому, пожалуйста, не стесняйтесь говорить мне, что все, что я собираюсь сделать, отключено, если вы думаете, что это так.
ОБНОВЛЕНИЕ, вот сгенерированный XML модели:
<?xml version="1.0" encoding="utf-8"?>
<Database Name="DB_Name" Class="nameDataContext" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007">
<Connection Mode="WebSettings" ConnectionString="Data Source=some_data_source;Initial Catalog=some_db;Integrated Security=True" SettingsObjectName="System.Configuration.ConfigurationManager.ConnectionStrings" SettingsPropertyName="name_ConnectionString" Provider="System.Data.SqlClient" />
<Table Name="" Member="Visits">
<Type Name="Visit">
<Column Name="Date" Type="System.DateTime" CanBeNull="false" />
<Column Name="Visits" Type="System.Int32" CanBeNull="false" />
<Column Name="ENT1" Type="System.Int32" CanBeNull="false" />
<Column Name="ENT2" Type="System.Int32" CanBeNull="false" />
<Column Name="ENT3" Type="System.Int32" CanBeNull="false" />
<Column Name="ENT4" Type="System.Int32" CanBeNull="false" />
<Column Name="ENT5" Type="System.Int32" CanBeNull="false" />
</Type>
</Table>
<Function Name="dbo.sp_proc_name" Method="sp_proc_name">
<Parameter Name="start_dt" Type="System.DateTime" DbType="DateTime" />
<Parameter Name="end_dt" Type="System.DateTime" DbType="DateTime" />
<ElementType Name="sp_proc_nameResult">
<Column Name="date" Type="System.String" DbType="VarChar(30)" CanBeNull="true" />
<Column Name="Visits" Type="System.Int32" DbType="Int" CanBeNull="true" />
<Column Name="ENT1" Type="System.Int32" DbType="Int" CanBeNull="true" />
<Column Name="ENT2" Type="System.Int32" DbType="Int" CanBeNull="true" />
<Column Name="ENT3" Type="System.Int32" DbType="Int" CanBeNull="true" />
<Column Name="ENT4" Type="System.Int32" DbType="Int" CanBeNull="true" />
<Column Name="ENT5" Type="System.Int32" DbType="Int" CanBeNull="true" />
</ElementType>
</Function>
</Database>
ОБНОВЛЕНИЕ 2 Когда я запускаю хранимую процедуру в Visual Studio, вывод представляет собой набор строк, за которыми следуют:
No rows affected.
(129 row(s) returned)
@RETURN_VALUE = 0
Я предполагаю, что это, вероятно, последняя строка, которая является виновником.