Ausblick auf die kommende Version 4.5

Neues Jahr neues Entity Framework (Teil 2)
Kommentare

Stored Procedures mit mehreren Ergebnissen
Um die Anzahl der Anfragen zu minimieren, können Stored Procedures im SQL Server mehrere Ergebnismengen zurückliefern. Bis dato konnte das Entity Framework

Stored Procedures mit mehreren Ergebnissen

Um die Anzahl der Anfragen zu minimieren, können Stored Procedures im SQL Server mehrere Ergebnismengen zurückliefern. Bis dato konnte das Entity Framework jedoch lediglich die erste Ergebnismenge berücksichtigen. Künftig können auch alle weiteren eingesehen werden. Zur Veranschaulichung zeigt Listing 5 eine Stored Procedure, die ein Hotel und alle Buchungen dieses Hotels abruft (Abb. 5).

Listing 5

ALTER PROCEDURE [dbo].[GetHotelAndBuchungen](
  @hotelId int )
AS
BEGIN

  SET NOCOUNT ON;

   select * from Hotel where HotelId = @hotelId;
   select * from HotelBuchung where HotelId = @hotelId;
END
  

Abb. 5: Stored Procedure mit mehreren Ergebnismengen
Abb. 5: Stored Procedure mit mehreren Ergebnismengen

Da die aktuelle CTP noch keine grafische Unterstützung für dieses Szenario bietet, ist das Entity Data Model nach dem Definieren eines Function-Imports für diese Stored Procedure manuell um Informationen über die zweite Ergebnismenge zu erweitern. Dazu wird das Entity Data Model als XML-Datei geöffnet und wie in Listing 6 und Listing 7 dargestellt, erweitert.

Listing 6



[...]

  
  
  

[...]

      
      
      
      
      
      
    

    
      
      
      
      
    
        
  

  
Listing 7


  
    
      [...]
      
        
          
            
            
            
            
            
            
          
        
        
          
            
            
            
            
          
        
      
    
  

  

Anschließend kann über das Entity Framework auf beide Ergebnismengen zugegriffen werden (Listing 8). Dazu ruft das betrachtete Beispiel beim ObjectResult, das die erste Ergebnismenge repräsentiert, die Methode GetNextResult auf, um ein weiteres ObjectResult zu erhalten, das Zugriff auf die zweite Ergebnismenge gewährt. Als Typparameter wird dabei der Typ der einzelnen Zeilen dieser Ergebnismenge angegeben. Im betrachteten Fall handelt es sich dabei um den im Mapping definierten Complex Type GetHotelAndBuchungen_Result2.

Listing 8

private static void MultiResultSPDemo()
{
    using (var ctx = new HotelDbContext())
    {
        var hotels = ctx.GetHotelAndBuchungen(1);
        foreach (var hotel in hotels)
        {
            Console.WriteLine(hotel.Bezeichnung);
        }

        var buchungen = hotels.GetNextResult();
        foreach (var b in buchungen)
        {
            Console.WriteLine("t" + b.Vorname + " " + b.Nachname);
        }
    }
}
  
Verbesserungen an der Werkzeugunterstützung

Auch für die Werkzeugunterstützung in Visual Studio bietet die betrachtete CTP ein paar Verbesserungen. So kann zum Beispiel beim Reverse Engineering einer Datenbank angegeben werden, dass für sämtliche importierten Stored Procedures automatisch ein Function Import anzulegen ist. Daneben können mit einem Klick die Tabellen, Views oder Stored Procedures eines bestimmten Schemas angewählt werden.

Für große und somit unübersichtliche Modelle können nun auch verschiedene Diagramme, die jeweils nur einen Teil der Entitäten widerspiegeln, im Model Browser angelegt werden. Alternativ kann eine Entität mit dem Kontextmenübefehl MOVE TO NEW DIAGRAM, der nun im Designer zur Verfügung steht, in ein neues Diagramm ausgelagert werden. Jedes Diagramm bietet somit eine bestimmte Sicht auf das Entity Data Model, und zentrale Klassen können auch in mehreren Modellen vorkommen.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -