Я играл с EF в последние пару дней.
Наши приложения основаны на базах данных SQL Anywhere 10, и весь наш доступ к данным осуществляется через хранимые процедуры. Поскольку EF не поддерживается SA 10, я тестирую EF с SA 11.
Для этого я создал небольшую базу данных с двумя таблицами и парой хранимых процедур (на основе базы данных nerddinner из примеров mvc asp.net, см. здесь )
Я создал модель из базы данных, таблиц и хранимых процедур и выполнил необходимые функции импорта.
У меня есть хранимая процедура со следующей подписью:
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
И полученный код импорта функции выглядит так:
public global::System.Data.Objects.ObjectResult<dinner> get_dinner(global::System.Data.Objects.ObjectParameter dinner_id)
{
return base.ExecuteFunction<dinner>("get_dinner", dinner_id);
}
И в этом проблема. В идеале сгенерированный код должен принимать параметр int вместо global::System.Data.Objects.ObjectParameter dinner_id
Насколько я вижу, в файле edmx есть все данные, необходимые для правильной интерпретации типов параметров:
<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>
Я что-то здесь упускаю? Что еще нужно для импорта функции с правильным типом параметра? Это можно исправить, настроив файл edmx, или это проблема реализации поддержки SA11 EF.
Надеюсь, кто-нибудь может дать мне некоторые дополнительные подсказки.