2014-02-07 122 views
0

这是我期望的简单但不起作用的东西。我只是希望能够在我的SQL Server数据库中创建存储过程,并从我的MVC3 Web应用程序中调用它们。我设法将我的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方法,当我调试时它看起来都很好。

请大力接收任何帮助。

Joe

+0

那么,这将有助于你了解你使用的是哪种技术。 MVC没有任何数据访问功能。您可以使用任何您想要的数据访问技术。您好像使用的是不是MVC的实体框架。 –

+0

这是一个公平点。我应该更加明确。谢谢 – Yos

回答

1

您存储的资料不会返回school_accreditation实体。由于它是一个删除,它只会返回受影响的行数。但是,您存储的预处理ExecuteFucntion似乎需要返回类型的school_accreditation。

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

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

+0

这非常合理。所以这可能是我的存储过程是错误的(我假设你会注意到这一点,因此我可以认为它没问题),或者像你说的我犯了一个错误。无论哪种方式非常感谢你。我会解决它! – Yos