2010-08-30 4 views
2

J'ai une procédure stockée très simple qui renvoie plusieurs ensembles d'enregistrements. Tous les ensembles d'enregistrements ont des colonnes aliasées de sorte qu'ils se ressemblent tous.Entity Framework 4 - Comment lire plusieurs jeux d'enregistrements à partir d'une procédure stockée?

E.g.

SELECT TOP 10 FooId AS Id, Name As Name FROM Foos 
    SELECT TOP 10 BarId AS Id, Name As Name FROM Bars 
     ... 

Pour ma configuration EF, j'utilise Poços et avoir ma propre DataContext (sans génération de code).

Maintenant, j'ai créé une "Importation de fonction" en utilisant la technique détaillée here.

Mais le problème est, il est de créer un type complexe avec ID et nom, pas un type qui peut contenir plusieurs collections d'ID et de nom. EF ne peut-il pas détecter que je renvoie plusieurs ensembles d'enregistrements? Par conséquent, le proc stocké est exécuté correctement, mais les seuls enregistrements qui reviennent proviennent de la première instruction select, les autres sont ignorés. Donc je ne récupère que 10 records.

Voilà comment im exécution de la procédure stockée dans mon DataContext personnalisé:

public ObjectResult<SomeSimpleProc_Result> GetSomeStuff() 
    { 
     return base.ExecuteFunction<SomeSimpleProc_Result>("SomeSimpleProc); 
    } 

et le résultat de retour POCO:

public class SomeSimpleProc_Result 
    { 
     #region Primitive Properties 

     public int Id 
     { 
      get; 
      set; 
     } 

     public string Name 
     { 
      get; 
      set; 
     } 

     #endregion 
    } 

Le résultat final est que je veux un objet qui a 0- objets * dedans (dans le cas ci-dessus, 3 objets). Chaque objet devrait contenir un ensemble d'objets simples (Id, Name).

Je pense que le problème est définitivement avec la personnalisation de la «fonction Import». Comment devrais-je créer le type complexe? Ou devrais-je utiliser "Retourne une collection d'entités".

Des idées?

Répondre

4

Je pense que plusieurs ensembles de resut ne sont pas supportés dès le départ. Here est un article de blog sur leur utilisation dans EF v1. EF v4 aussi ne supporte pas les directement - des commentaires dans ce article contient après la déclaration de Danny Simmons (il l'habitude d'être responsable dev pour EF et LINQ to Sql):

Malheureusement, nous n'ont pas pu obtenir support complet pour plusieurs résultats en le produit cette fois. Nous avons, cependant, ajouter la méthode Traduire à ObjectContext qui vous permet de matérialiser des objets à partir d'un DataReader. ...

Edit: Pour faire ce petit peu à jour: EF 4.5 (4.5 .NET + VS2012) supports stored procedures with multiple result sets mais au moins en version bêta il semblait que le support est pas implémentée dans l'interface utilisateur et la validation EDMX aussi se sont plaints de certains problèmes, mais à l'exécution, cela a fonctionné correctement.

+0

Ah Ha! Belle trouvaille. D'accord, il semble que nous devions revenir à un "classique" ADO.NET pour obtenir les ensembles de résultats. Dang. Même problème avec la mise à jour de plusieurs enregistrements avec une seule transaction (utiliser SqlCommand). Eh bien, au moins nous le savons. Merci. – RPM1984

Questions connexes