У меня возникла бесконечная проблема с попыткой вызвать хранимую процедуру с контроллера - если бы я мог добавить щедрость к этому, так как это было слишком много время уже и я не знаю, что еще делать (но у меня нет точек). Основываясь на моих исследованиях, кажется, что это известная ошибка, но не обходные методы для меня работали, поэтому я сделаю все возможное, чтобы объяснить в надежде на решение:Проблема с хранимой процедурой в LINQ-to-SQL
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 к SQL объекту сущности вручную, которая имеет свойство для каждого из вышеуказанных возвращаемых столбцов (Даты, посещений, ent1, ent2 ... ent5).
3 - Я попытался перетащить хранимую процедуру как функцию в указанный объект объекта в конструкторе VS, но это не позволило мне, поскольку он говорит, что «возвращенная схема не соответствует целевому классу». Поэтому я просто перетащил его в другое место и создал функцию (я даже изменил тип возврата на объект, но не работал, см. Ниже).
** ПРИМЕЧАНИЕ. Я полагаю, что Visual Studio считает, что хранимая процедура возвращает Int - не ожидаемую таблицу значений. ** Предлагаемое исправление для этого типа проблемы состояло в том, чтобы создать фиктивную хранимую процедуру, которая имеет только простой оператор выбора и заменяет его после перетаскивания на объект, но это не сработало.
4 - Я пробовал все, что я может думать в контроллере, например, пытаться вернуть IMultipleResults при вызове хранимой процедуры и преобразовании ее в объект модели без каких-либо успехов.
Основная проблема заключается в том, что не возвращаются строки, а только int.
Заранее благодарим за помощь! Я новичок в MVC, поэтому, пожалуйста, не стесняйтесь рассказывать мне весь путь, который я собираюсь сделать, если вы считаете, что это так.
UPDATE, вот сгенерированный 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>
UPDATE 2 При запуске хранимой процедуры в Visual Studio вывод представляет собой набор строк, а затем:
No rows affected.
(129 row(s) returned)
@RETURN_VALUE = 0
Я предполагаю, что это, вероятно, последняя строка, которая является виновником.
Я также заметил, что возвращенная «дата» функции, созданной импортом SP, установлена в строку - я исправлю это (когда я смогу понять, как), но я не думаю, что это исправит основную вопрос о возврате int. – Mikalee