2009-09-03 12 views
0

J'ai une procédure stockée GetMyTime. Il a un paramètre int PersonID, et retourne une donnée. Après l'ajouter à EDMX et l'importer en tant que fonction. Ensuite, j'essaie de se moquer d'écrire jusqu'à 4.0 un code comme ci-dessous:Comment écrire le code pour la fonction d'importation à partir d'une procédure stockée dans EF 3.5?

public ObjectResult<Nullable<global::System.DateTime>> GetMyTime(Nullable<global::System.Int32> PersonID) 
     { 
      ObjectParameter[] PersonIDParameters; 
      if (PersonID.HasValue) 
      { 
       PersonIDParameters = new ObjectParameter[]{new ObjectParameter("PersonID", PersonID)}; 
      } 
      else 
      { 
       PersonIDParameters = new ObjectParameter[]{new ObjectParameter("PersonID",typeof(global::System.Int32))}; 
      } 
      return base.ExecuteFunction<Nullable<global::System.DateTime>>("GetMyTime", PersonIDParameters); //this line cause error 
     } 

Mais je reçois une erreur à la dernière ligne: « ? System.DateTime » Erreur 2 Le type ne peut pas être utilisé comme paramètre de type 'TElement' dans le type ou la méthode générique 'System.Data.Objects.ObjectContext.ExecuteFunction (string, params System.Data.Objects.ObjectParameter [])'. Il n'y a pas de conversion de boxe de 'System.DateTime?' à 'System.Data.Objects.DataClasses.IEntityWithChangeTracker'.

Comment le réparer?

Répondre

1

Selon MSDN, le "TElement" dans ExecuteFunction<TElement> est un type d'entité. Vous voulez renvoyer une valeur scalaire.

Les valeurs scalaires de retour sont cassées dans la version 3.5, mais vous mentionnez que vous travaillez avec EF v4, donc cela devrait fonctionner. Ma suggestion serait de câbler l'importation de la fonction scalaire à travers le concepteur EDM, construire, et utiliser le code généré pour obtenir des conseils sur la façon exacte de retourner une valeur scalaire.

+0

Merci. Je travaille avec 3.5, pas 4.0 (VS 2008 sp1 sur XP). Est-il possible de modifier le code et de le faire fonctionner? – KentZhou

+0

Dans 3.5, vous pouvez seulement mapper des procs qui renvoient des types d'entités. –

Questions connexes