2009-07-18 3 views
1

Ich habe mehrere gespeicherte Prozeduren, die eine stark typisierte Ergebnismenge zurückgeben. Ich habe gelernt, dass Linq eine eigene Methode für den Umgang damit hat, die überschrieben werden muss (oder zumindest so aussieht).Visual Studio stampfen auf Linq Stored Procedures

Mein Problem ist Visual Studio besteht darauf, gespeicherte Prozeduren zwangsweise neu zu erstellen. Ich möchte das deaktivieren.

Hier ist meine manuell geänderte Datei:

[Function(Name="dbo.spGetNote")] 
    public ISingleResult<Note> spGetNote([Parameter(DbType="Int")] System.Nullable<int> noteId, [Parameter(DbType="Int")] System.Nullable<int> securityUserId) 
    { 
     IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), noteId, securityUserId); 
     return ((ISingleResult<Note>)(result.ReturnValue)); 
    } 

Hier ist, was es standardmäßig es:

[Function(Name="dbo.spGetNote")] 
    public ISingleResult<spGetNoteResult> spGetNote([Parameter(DbType="Int")] System.Nullable<int> noteId, [Parameter(DbType="Int")] System.Nullable<int> securityUserId) 
    { 
     IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), noteId, securityUserId); 
     return ((ISingleResult<spGetNoteResult>)(result.ReturnValue)); 
    } 

Dies ist einer der kleineren.

Es gibt einige andere Bereiche, die es verwirrt, aber diese sind reparierbar. Es wird echte alte zurück gehen und dies anpassen.

Was wir getan haben, ist jede gespeicherte Prozedur, die ihr eigenes stark typisiertes Element zurückgibt, ist ihr eigener Datenkontext/Klasse, so dass jedes Mal, wenn wir unser DAL aktualisieren, es (Visual Studio) nicht auf unserem stampft benutzerdefinierte Änderungen.

Gibt es etwas, was ich tun kann, um diese Kopfschmerzen zu lindern?

Was all das anbrachte ist, dass ich Namensräume bereinige, und ich habe festgestellt, dass ich den Namespace nicht ändern kann, ohne dass Visual Studio jede gespeicherte Prozedur im Projekt zerlegt und ich nicht stundenlang arbeiten möchte dieses Durcheinander aufräumen. Scheinbar ist eine globale Ersetzung nicht genug, da Visual Studio dies feststellt und dann sagt, dass es keine Verbindungszeichenfolge finden kann und muss jede einzelne Datei neu erstellen müssen.

Antwort

2

Da den automatisch generierte Datacontext Teil ist, könnten Sie Ihren eigenen Teil erstellen Klassifizieren und verschieben Sie Ihre angepassten Methoden/Typen in das Partielle. d.h.

MyDataContext.cs

public partial MyDataContext 
{ 
     [Function(Name="dbo.spGetNote")]   
     public ISingleResult<Note> spGetNote([Parameter(DbType="Int")]... 
} 

public class Note... 

Joe

+0

Ee GAD. Ich wusste, dass es einen Grund für diese Teilklassen gab. Und trotzdem hat es mich nie getroffen. Vielen Dank! –

1

Generierten Code nicht ändern. Wenn Sie dies tun, werden Ihre Änderungen bei jedem Blick auf die dbml-Datei wahrscheinlich verloren gehen. Sie können (ich habe es nicht versucht) in der Lage sein, dies zu beheben, indem Sie die dbml von Hand bearbeiten (es ist nur xml); aber IMO, die einfachste Art und Weise des Umgangs mit dieser ist in Ihrem Repository, eine Projektion aus dem dbml generierten Typ Ihre Art zu tun:

Note[] SomeFunc(...) { 
    using(var ctx = ...) { 
     return (from row in ctx.SomeSP(...) // row is the dbml type 
      select new Note { // Note is our custom type 
       Id = row.Id, 
       Name = row.Name, 
       // etc 
       }).ToArray(); // or whatever 
    } 
} 
Verwandte Themen