2010-11-23 104 views
2

我想挑你的头脑......ASP.NET MVC调用存储过程

所以我有这个观点,即允许小的寄存器...和存储过程。

我在打电话时看到这些伪“储存库”......对我来说,这看起来像是一个额外的漏洞,需要进行钻孔才能打电话。这带来了三个问题:

1)伪存储库有什么意义?

2)什么是最好的地方让我的存储过程调用:在视图控制器功能或引用其他一些功能?

3)我如何接收存储的程序结果(即成功失败)?

这里是我的电话:

long? tmp = 1234; 
LinqToPartyDataContext lq = new LinqToPartyDataContext(); 
lq.spCreatePersonaParty(ref tmp, 
    model.FirstName, 
    null, 
    null, 
    null, 
    null, 
    null, 
    null, 
    null, 
    model.EmailAddress, 
    null, 
    null, 
    null, 
    null, 
    null, 
    model.ZipCode, 
    null, 
    null); 

我怎么造成的?

+0

看到我的回答(这是你编辑之前)。你在使用L2SQL还是EF?另外,为什么所有的无效参数?你应该在那里创建重载。使您的代码更加清洁。 – RPM1984 2010-11-23 00:35:41

+0

我刚想到我必须传递一些东西......不是吗? – dcolumbus 2010-11-23 00:39:21

回答

1

1)伪存储库有什么意义?

隐藏您的UI中的底层实现细节。 E.g:

IFooRepository repo; 
var foo = repo.FindSingle(1); 

所有UI知道的是,它被调用东西将取回什么是想要的。为什么它应该关心实际的细节?它所关心的是获得它想要的结果。

您的实际实现可能是L2SQL存储库,实体框架,甚至是传统的ADO.NET实现。

2)什么是最好的地方让我的存储过程调用:在视图控制器功能或引用其他一些功能?

Definetely不是从用户界面。

创建暴露所述参数存储过程,其控制器可以调用一个接口到:

var result = repository.FindSomethingSpecific(param1, param2); 
return View(result); 

3)如何我收到所存储procedues结果(即失败的成功) ?

这实际上取决于你的持久层(EF/L2SQL/classic ADO)。

如果您使用EF,您可以将SPROC的结果返回到POCO,UI可以通过模型绑定访问该POCO。

如果您使用L2SQL(无POCO支持),您将不得不手动投影到POCO(从左至右复制)并绑定到该对象。

如果您使用的是经典ADO.NET,则必须手动遍历结果集并投影到POCO中。