Funktion Importiert in Entity Model mit einem Rückgabetyp, der nicht Entity ist

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

Frage

Ich habe eine gespeicherte Prozedur in meinem Entitätsdatenmodell und füge sie der Funktionsimportierung hinzu.

Problem ist ... Visual Studio generiert den Funktionscode im Code-Behind des Modells, wenn und nur dann, wenn ich den Rückgabewert als Entitätstyp angeben möchte. Skalar- und Nullrückgabetypen funktionieren nicht. Visual Studio generiert den Funktionscode nicht, wenn ich sie auswähle.

Gibt es etwas, was ich vermisse oder ist das ein Fehler?
Irgendwelche Umgehungen?


Verwenden von Visual Studio 2008 v9.0.30729.1 SP (Service Pack 1)

Akzeptierte Antwort

Es ist weniger ein Fehler als das Fehlen einer Funktion. Das Entity Framework unterstützt gerade keine gespeicherten Prozeduren, die jetzt Skalarwerte zurückgeben. Ich glaube, das soll sich in .NET 4.0 ändern. In der Zwischenzeit können Sie eine solche gespeicherte Prozedur mithilfe der Geschäftsverbindung ausführen, die über CreateDbCommand verfügbar ist .


Beliebte Antwort

Da das Einzige, was jetzt funktioniert, die Zuordnung des Rückgabetyps zu einer Entität ist, besteht eine Problemumgehung darin, eine den Rückgabedaten entsprechende Ansicht und eine Entität für die Ansicht zu erstellen. Dies funktioniert nur, wenn der SP eine SELECT-Anweisung ausführt, um eine Ergebnismenge zurückzugeben, nicht einen Rückgabewert. Ich habe das so bekommen, um mit einer Beispiel-App zu arbeiten: 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

AUSSICHT:

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

Erstellen Sie den Funktionsimport, indem Sie den Rückgabetyp auf View_1 setzen, und erstellen Sie das Modell.

in 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();
        }
      }
    }

Stellen Sie sicher, dass die Spaltennamen zwischen Ansicht und SP genau gleich sind. Toby



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum