这是我希望简单但不起作用的东西。我只是希望能够在我的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,当我调试时它看起来都没问题。
请大家给予任何帮助。
乔
答案 0 :(得分:1)
您存储的预备文件不会返回school_accreditation实体。由于它是删除,因此只返回受影响的行数。但是,您存储的preocedure ExecuteFucntion似乎需要返回类型的school_accreditation。
显然,在生成sproc方法时,你做错了什么。你有没有机会在生成它之后改变它?如果是这样,请从edmx中删除该方法并重新添加。
对于这样的事情,直接进行呼叫可能更简单。像MyContext.Database.ExecuteSqlCommand("DeleteSchoolAccreditations", school_id);