2010-11-23 20 views
2

Ich wollte Ihre Gedanken ...ASP.NET MVC Aufruf gespeicherte Prozeduren

So habe ich diese Ansicht, die für ein kleines Register erlaubt ... und eine gespeicherte Prozedur.

Ich habe diese Pseudo "Repositories" gesehen, wenn Sie Anrufe tätigen ... für mich scheint es einfach wie ein zusätzliches Loch, das gebohrt werden muss, um den Anruf zu tätigen. Dies bringt drei Probleme mit sich:

1) Was ist der Sinn von Pseudo-Repositories?

2) Was ist der beste Ort, um meine gespeicherte Prozedur aufrufen: innerhalb der Ansichten Controller-Funktion oder Verweis auf eine andere Funktion?

3) Wie erhalte ich das Ergebnis der gespeicherten Prozedur (d. H. Erfolg des Fehlers)?

Hier ist mein Aufruf:

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); 

Wie kann ich das Ergebnis zu erhalten?

+0

siehe meine Antwort (die vor Ihrer Bearbeitung war). Verwenden Sie L2SQL oder EF? Auch warum alle null params? Sie sollten dort Überladungen erstellen. Macht Ihren Code viel sauberer. – RPM1984

+0

Ich dachte nur, dass ich etwas passieren musste ... nein? – dcolumbus

+0

Eine Überlastung? Wie würde das umgesetzt werden? – dcolumbus

Antwort

1

1) Was ist der Sinn von Pseudo-Repositories?

So blenden Sie die zugrunde liegenden Implementierungsdetails von Ihrer Benutzeroberfläche aus. Z. B:

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

All UI weiß ist, dass es etwas ruft das wird abrufen, was will, ist. Warum sollte es sich um die tatsächlichen Details kümmern? Es geht nur darum, die gewünschten Ergebnisse zu erzielen.

Ihre tatsächliche Implementierung könnte ein L2SQL-Repository, Entity Framework oder sogar eine klassische ADO.NET-Implementierung sein.

2) Was ist der beste Ort, um meine gespeicherte Prozedur aufzurufen: innerhalb der Views-Controller-Funktion oder Verweis auf eine andere Funktion?

Definiert nicht von der Benutzeroberfläche.

eine Schnittstelle erstellen, die die Parameter der gespeicherten Prozedur aussetzt, die die -Controller nennen kann in:

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

3) Wie erhalte ich die gespeicherten procedues führen (dh Erfolg des Scheiterns) ?

Dies hängt wirklich von Ihrer Persistenzschicht ab (EF/L2SQL/classic ADO).

Wenn Sie EF verwenden, können Sie das Ergebnis des SPROC in ein POCO zurückgeben, auf das die Benutzeroberfläche über Modellbindung zugreifen kann.

Wenn Sie L2SQL verwenden (keine POCO-Unterstützung), müssen Sie manuell in ein POCO projizieren (von links nach rechts kopieren) und an dieses binden.

Wenn Sie klassischen ADO.NET verwenden, müssen Sie die Ergebnismenge manuell durchlaufen und in ein POCO projizieren.

+0

Ich erstellte ein Datenmodell .dbml und zog die gespeicherte Prozedur in. Das ist, was ich anrufe, um den Datensatz zu aktualisieren. Ich bin neu in all dem, also versuche ich jedes Stück so zu verdauen, wie ich es brauche. Ich schätze Ihre Hilfe. – dcolumbus

+0

Richtig, also verwenden Sie Linq zu Sql. Das bedeutet, dass Sie in Ihrer DAL einige Stiche machen müssen, um ein POCO (einfaches Objekt) zurückzugeben, um an das in Ihrer UI zu binden. – RPM1984

+0

Vielleicht können Sie dies alles für mich löschen ... Wie würden Sie eine Verbindung zu einem SQL Server mit Entity Framework herstellen? Das ist, wo ich diese Anwendung gerne nehmen würde, aber ich kann nicht in der Lage sein, all das Fett durchzuschneiden, um direkt zum Fleisch zu kommen. – dcolumbus

Verwandte Themen