2009-06-12 3 views
2

Я играл с EF за последние пару дней. Наши приложения основаны на базе SQL Anywhere 10, и весь наш доступ к данным осуществляется через хранимые процедуры. Поскольку EF не поддерживается SA 10, я тестирую EF с SA 11. С этой целью я создал небольшую базу данных с двумя таблицами и несколькими хранимыми процедурами (на основе базы данных nerddinner из образцов asp.net mvc, см. here) Я создал модель из базы данных, таблиц и хранимых процедур и выполнил импорт необходимых функций. У меня есть хранимая процедура со следующей подписью:Entity Framework + Sql Anywhere 11 + Хранимые процедуры

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

И это проблема. В идеале, сгенерированный код должен принимать параметр целого типа, а не 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.

Надеюсь, кто-то может дать мне дополнительные подсказки.

ответ

1

Это известная проблема с параметрами InOut и кодом gen для Function Imports.

Мы говорим о том, чтобы параметры Inout производить такой код:

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

Вместо того, что у вас есть.

Одна вещь, которую нужно попробовать - преобразовать из параметра «InOut» в параметр «In». Code gen должен затем произвести что-то вроде этого:

public ObjectResults<dinner> get_dinner(int dinner_id); 

Реальный вопрос, хотя это работает, если вы его назовете?

Надеется, что это помогает фон

Приветствия

Alex

+0

Спасибо за ответ. Я попробую изменить файл edmx и посмотреть, работает ли он. Импорт функции, поскольку она генерируется в данный момент, работает, меня раздражает только тип параметра. – Gio2k

+0

Это работает. Надеемся, что проблема с нев параметрами будет решена в ближайшее время. – Gio2k

Смежные вопросы