ASP.NET MVC调用存储过程
问题描述:
我想挑你的头脑......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);
我怎么造成的?
答
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中。
看到我的回答(这是你编辑之前)。你在使用L2SQL还是EF?另外,为什么所有的无效参数?你应该在那里创建重载。使您的代码更加清洁。 – RPM1984 2010-11-23 00:35:41
我刚想到我必须传递一些东西......不是吗? – dcolumbus 2010-11-23 00:39:21