2017-02-13 9 views
0

У меня есть много хранимых процедур, которые мне нужно позвонить с System.Data.Entity.Database.ExecuteSqlCommand или System.Data.Entity.Database.SqlQueryЛюбой способ автоматически генерировать вызовы ExecuteSqlCommand или SqlQuery на основе данной хранимой процедуры TSQL?

Моими хранимые процедуры требуют много параметров, в том числе выходных параметров. Ручное кодирование создания параметра может занять некоторое время, и это может быть ошибочным.

Есть ли способ автоматически генерировать ExecuteSqlCommand или SqlQuery звонки на основе данной хранимой процедуры T-SQL?

Я знаю, что могу использовать модель .edmx, но, насколько мне известно, модели используют функции импорта функций. Мне нравится делать прямой звонок ExecuteSqlCommand или SqlQuery.

+0

Ответ "нет" нет опции автоматической. Мне пришлось сдать его код. –

ответ

0

Являются ли хранимые процедуры похожими друг на друга? Выбирают ли они или присоединяются аналогично, но какое-то другое положение отличается?

+0

Основное внимание уделяется генератору кода. Независимо от моего конкретного сценария, мне нравится знать, есть ли такой генератор кода для SP. У нас есть такой генератор кода для сильно типизированных наборов данных, но он работает исключительно хорошо. –

0

Не полное решение как таковое, но вот некоторые SQL-запросы, которые возвратят необходимый параметр хранимой процедуры и информацию о результатах. Вы можете использовать их с помощью T4 Template (или аналогичного) для генерации кода доступа к данным.

параметры хранимых процедур:

select 
    schema_name(sp.schema_id) as schema_name, 
    sp.name as procedure_name, 
    p.name as parameter_name, 
    typ.name as type_name, 
    p.max_length, 
    p.precision, 
    p.scale, 
    p.is_output 
from sys.procedures sp 
left join sys.parameters p on p.object_id = sp.object_id 
left join sys.types typ on typ.user_type_id = p.user_type_id 
order by schema_name, sp.name, p.parameter_id 

Хранимых результаты процедуры:

if serverproperty('islocaldb') is not null -- identifies sql server 2012+, which is the first version that supports dm_exec_describe_first_result_set_for_object 
or serverproperty('edition') = 'SQL Azure' -- azure sql also supports dm_exec_describe_first_result_set_for_object 
    select 
     schema_name(sp.schema_id) as schema_name, 
     sp.name as procedure_name, 
     rs.name as column_name, 
     typ.name as type_name, 
     rs.max_length, 
     rs.precision, 
     rs.scale 
    from sys.procedures sp 
    cross apply sys.dm_exec_describe_first_result_set_for_object(sp.object_id, 0) rs 
    join sys.types typ on typ.system_type_id = rs.system_type_id 
    order by schema_name, sp.name, rs.column_ordinal 
else 
    select 
     null as schema_name, 
     null as procedure_name, 
     null as column_name, 
     null as type_name, 
     null as max_length, 
     null as precision, 
     null as scale