Importations de fonction dans le modèle d'entité avec un type de retour non-entité

.net .net-3.5 ado.net entity-framework visual-studio

Question

J'ai une procédure stockée dans mon modèle de données d'entité et je l'ai ajoutée aux importations de fonction.

Le problème est que ... Visual Studio génère le code de fonction dans le code-behind du modèle si et seulement si je spécifie que le retour est un type d'entité. Les types de retour scalaire et nul ne fonctionnent pas. Visual Studio ne génère pas le code de fonction lorsque je les choisis.

Y at-il quelque chose qui me manque ou est-ce un bug?
Des solutions de rechange?


Utilisation de Visual Studio 2008 v9.0.30729.1 SP (Service Pack 1)

Réponse acceptée

Ce n'est pas tellement un bug, c'est l'absence de fonctionnalité. Entity Framework ne prend tout simplement pas en charge les procédures stockées renvoyant des valeurs scalaires pour le moment. Je crois que ceci est supposé changer dans .NET 4.0. En attendant, vous pouvez exécuter une telle procédure stockée à l'aide de la connexion au magasin, disponible via CreateDbCommand .


Réponse populaire

Comme la seule chose qui fonctionne à présent est de mapper le type de retour sur une entité, une solution consiste à créer une vue correspondant aux données de retour et à créer une entité pour la vue. Cela ne fonctionnera que si le SP fait un SELECT pour renvoyer un ensemble de résultats, pas une valeur de retour. J'ai eu cela pour travailler avec un exemple d'application, comme suit: SP:

ALTER PROCEDURE [dbo].[DoSomething]
    @param1 varchar(50),
    @param2 varchar(50)
AS
BEGIN
    DECLARE @ID INT
    SET NOCOUNT ON;
    INSERT tmp_header (fname, lname) VALUES (@param1, @param2) 
    SET @ID = SCOPE_IDENTITY()
    SELECT @ID AS 'id'
END

VUE:

CREATE VIEW [dbo].[View_1]
AS
SELECT   0 as  id

Créez la fonction import en définissant le type de retour sur View_1 et générez le modèle.

dans du code:

    class Program
    {
      static void Main(string[] args)
      {
        using (PS_RADSTESTEntities ctx = new PS_RADSTESTEntities())
        {
          EntityConnection ec = ctx.Connection as EntityConnection;
          ec.Open();
          DbTransaction txn = ec.BeginTransaction();
          ObjectResult<View_1> result = ctx.DoSomething("Toby", "Kraft");
          View_1 row = result.Single();
          int id = row.id;
// do some other interesting things ...
          ctx.SaveChanges();
          txn.Commit();
        }
      }
    }

Veillez à définir exactement les mêmes noms de colonne entre la vue et le SP. Toby



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow