2009-06-12 23 views
2

Ich habe in den letzten Tagen mit dem EF gespielt. Unsere Anwendungen basieren auf SQL Anywhere 10-Datenbanken, und unser gesamter Datenzugriff erfolgt über gespeicherte Prozeduren. Da EF nicht von SA 10 unterstützt wird, teste ich EF mit SA 11. Zu diesem Zweck habe ich eine kleine Datenbank mit 2 Tabellen und ein paar Stored Procedures erstellt (basierend auf der nerddinner Datenbank aus den asp.net mvc samples, siehe here) Ich habe ein Modell aus der Datenbank, Tabellen und gespeicherten Prozeduren erstellt und die notwendigen Funktionsimporte durchgeführt. Ich habe eine gespeicherte Prozedur mit der folgenden Signatur:Entity Framework + Sql Anywhere 11 + Gespeicherte Prozeduren

ALTER PROCEDURE "DBA"."get_dinner"(@dinner_id integer) 
BEGIN 
select dinner_id, title, event_date, description, hosted_by , contact_phone, address, country, latitude, longitude 
from dba.dinners d 
where d.dinner_id = @dinner_id 
END 

Und die resultierende Funktion Import-Code sieht wie folgt aus:

public global::System.Data.Objects.ObjectResult<dinner> get_dinner(global::System.Data.Objects.ObjectParameter dinner_id) 
{ 
    return base.ExecuteFunction<dinner>("get_dinner", dinner_id); 
} 

Und das ist das Problem. Idealerweise erzeugt der Code sollte einen int-Parameter akzeptieren, statt global::System.Data.Objects.ObjectParameter dinner_id Soweit ich sehen, die edmx Datei hat alle Daten, die es richtig die Parametertypen interpretieren muss:

<Function Name="get_dinner" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="DBA"> 
    <Parameter Name="dinner_id" Type="int" Mode="InOut" /> 
</Function> 

Fehle ich etwas hier? Was ist sonst noch nötig, um einen Funktionsimport mit dem richtigen Parametertyp zu haben? Ist das etwas, das Sie korrigieren können, indem Sie die EDMX-Datei optimieren, oder ist es ein Problem der SA11 EF-Unterstützung.

Hoffe jemand kann mir weitere Hinweise geben.

Antwort

1

Dies ist ein bekanntes Problem mit InOut-Parametern und Code-Gen für Funktionsimporte.

Wir sprechen haben über InOut Parameter machen produzieren Code wie folgt:

public ObjectResults<dinner> get_dinner(ref int dinner_id); 

Eher als das, was Sie haben.

Eine Sache zu versuchen ist, von einem 'InOut' zu einem 'In' Parameter zu konvertieren. Code Gen sollte dann etwas in der Art produzieren:

public ObjectResults<dinner> get_dinner(int dinner_id); 

Die eigentliche Frage ist, funktioniert es, wenn Sie es nennen?

Hope this Hintergrund hilft

Prost

Alex

+0

Danke für die Antwort. Ich werde versuchen, die edmx-Datei zu ändern und sehen, ob es funktioniert. Der Funktionsimport, wie er gerade erzeugt wird, funktioniert, nur der Parametertyp nervt mich. – Gio2k

+0

Es funktioniert. Hoffentlich wird das Problem mit den Inout-Parametern bald gelöst sein. – Gio2k

Verwandte Themen