2010-11-23 61 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中。