2014-02-07 7 views
0

Это то, что я ожидал бы быть простым, но он не работает. Я просто хочу иметь возможность создавать хранимые процедуры в моей базе данных SQL Server и вызывать их из своего веб-приложения MVC3. Мне удалось получить свои SP, импортированные в сгенерированную функцию, но когда я вызываю это, я получаю сообщение об ошибке:MVC3 вызов SQL Server Сохраненная процедура

Устройство чтения данных несовместимо с указанной «dbname.school_accreditation». Элемент типа «school_accreditation_id» не имеет соответствующего столбца в устройстве чтения данных с тем же именем.

Я создал хранимую процедуру в SQL Server.

USE [mydb] 
GO 
/****** Object: StoredProcedure [dbo].[DeleteSchoolAccreditations] Script Date: 02/07/2014 20:56:21 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[DeleteSchoolAccreditations] 
@school_id int 
AS 

DELETE FROM [dbo].[school_accreditation] 
WHERE school_id = @school_id 

Сгенерированная функция C# для вызова SP.

public virtual ObjectResult<school_accreditation> DeleteSchoolAccreditations(Nullable<int> school_id) 
    { 
     ((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace.LoadFromAssembly(typeof(school_accreditation).Assembly); 

     var school_idParameter = school_id.HasValue ? 
      new ObjectParameter("school_id", school_id) : 
      new ObjectParameter("school_id", typeof(int)); 

     return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<school_accreditation>("DeleteSchoolAccreditations", school_idParameter); 
    } 

Должен ли я что-либо сделать для этого сгенерированного метода, чтобы заставить его работать. Я передаю метод int, и все это выглядит хорошо, когда я отлаживаю.

Пожалуйста, любая помощь будет получена.

Джо

+0

Ну, это поможет, если вы поймете, какую технологию вы использовали. MVC не имеет никакой функции для доступа к данным. Вы можете использовать любую технологию доступа к данным, которую вы хотите с ней. Кажется, вы используете Entity Framework, который не является MVC. –

+0

Это справедливая точка. Я должен был быть более явным. Спасибо – Yos

ответ

1

Ваш хранится preocedure не возвращает school_accreditation сущность. Поскольку это удаление, оно возвращает только количество затронутых строк. Тем не менее, ваш сохраненный preocedure ExecuteFucntion, похоже, хочет вернуть тип school_accreditation.

Очевидно, что вы сделали что-то не так, когда вы создали свой метод sproc. Вы, случайно, изменили sproc после того, как создали его? Если это так, удалите метод из своего edmx и повторно добавьте его.

Для чего-то вроде этого проще просто позвонить напрямую. Что-то вроде MyContext.Database.ExecuteSqlCommand("DeleteSchoolAccreditations", school_id);

+0

Это имеет смысл. Так что это либо моя хранимая процедура, которая является неправильной (я полагаю, вы бы это заметили, поэтому я могу предположить, что все в порядке), или, как вы сказали, я допустил ошибку. В любом случае, спасибо вам много. Я это сделаю! – Yos

Смежные вопросы