MVC3调用SQL Server存储过程

时间:2014-02-07 21:01:32

标签: sql-server asp.net-mvc-3 stored-procedures

这是我希望简单但不起作用的东西。我只是希望能够在我的SQL Server数据库中创建存储过程,并从我的MVC3 Web应用程序中调用它们。我设法将我的SP导入到生成的函数中但是当我调用它时出现错误:

数据阅读器与指定的< 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,当我调试时它看起来都没问题。

请大家给予任何帮助。

1 个答案:

答案 0 :(得分:1)

您存储的预备文件不会返回school_accreditation实体。由于它是删除,因此只返回受影响的行数。但是,您存储的preocedure ExecuteFucntion似乎需要返回类型的school_accreditation。

显然,在生成sproc方法时,你做错了什么。你有没有机会在生成它之后改变它?如果是这样,请从edmx中删除该方法并重新添加。

对于这样的事情,直接进行呼叫可能更简单。像MyContext.Database.ExecuteSqlCommand("DeleteSchoolAccreditations", school_id);

这样的东西