2011-06-30 37 views
0

我有一个正在执行视图并返回结果的参数化存储过程。该视图显示了两个表的连接结果。我需要将参数传递给此存储过程,并使用EF 4.1代码优先方法从MVC3控制器操作中调用它并返回结果。我怎样才能做到这一点。请一步一步建议。EF 4.1的存储过程

谢谢。

+0

你好:我用下面的代码 VAR RS =背景 。 Database.SqlQuery (“EXECUTE AuthenticateUser”)。ToList(); 看来工作,但有问题的视图返回那里作为我的POCO类本人身份证它被定义为列名“注册ID”: [关键] [列(“注册ID”) ] public long RegistryID {get;组; } 存储过程返回的列数及其名称应与poco类相同吗? – DotnetSparrow

回答

0

我不知道“代码优先不支持存储过程”的哪部分人不理解,但是这种情况不断出现,它不应该。你可以混淆它(种类),但是如果你需要执行存储过程,那么你现在不应该先使用代码。

+1

仅仅因为微软没有在4.1中包含它并不意味着人们不需要它。为了我自己的类似目的,我已经将所有连接信息与我的POCO建立了联系。我想要做的最后一件事是将一个完全独立的数据库模式放在一起,只是为了执行一些不适合我的POCO模型的任意SP。 –

+0

我从来没有说过人们不需要它。但是需要或不需要,它不在那里。 – Tridus

0

我不知道这是否会帮助你,但这里是如何我使用EF 4.1和DevArt驱动程序调用Oracle proc。这只是返回一个单一的值,但你可能会适应它返回多行。我有一个名为P_SID.SID_PGet package.proc:

PROCEDURE SID_PGet(io_SID OUT varchar2) is 
Begin 
    io_SID:=GetSID; 
End; 

下面是我如何把它和检索的SID值:

var parameter = new Devart.Data.Oracle.OracleParameter("io_SID", Devart.Data.Oracle.OracleDbType.VarChar, ParameterDirection.Output); 
this.Database.ExecuteSqlCommand("BEGIN P_SID.SID_PGet(:io_SID); END;", parameter); 
var sid = parameter.Value as string; 

return sid;