Как EF определяет обнуляемые параметры? - PullRequest
2 голосов
/ 05 мая 2011

У меня есть хранимая процедура SQL, и мне нужно иметь возможность передать NULL в качестве значения одному из его параметров для использования в запросе, подобном этому:

create procedure sp
    @param1 varchar(30)
as
select * from table where field = isnull(@param1, field)

Так что мне нужно кое-как сказать EF, чтобы сделать @param1 обнуляемым. Как мне это сделать?

Спасибо!

В случае, если это помогает, процесс, который я использую с EF:

  1. Создать SP
  2. Обновление модели (edmx)
  3. Добавление новой функции импорта
  4. Создать новый сложный тип, нажав кнопку
  5. Запустить Custom Tool для отдельного файла шаблона (для генерации POCO)

Ответы [ 4 ]

2 голосов
/ 05 мая 2011

В качестве обходного пути вы можете объявить две отдельные хранимые процедуры:

-- use this for non-null parameters
create procedure sp
    @param1 varchar(30)
as
select * from table where field = @param1

-- use this for null
create procedure sp_null
as
select * from table

и тогда вы можете написать нужную абстракцию в C #:

public ... GetSp(string param1)
{
    if (param1 == null)
        return ....sp_null();
    else
        return ....sp(param1);
}
1 голос
/ 12 мая 2011

Используйте DBNull.Value, я сделал именно это с одной из моих хранимых процедур.Для вызова вашей процедуры мой код будет выглядеть так:

List<ObjectParameter> objectParameterList = new List<ObjectParameter>();
if (string.IsNullOrEmpty(param1))
{
    object nullValue = DBNull.Value;
    objectParameterList.Add(new ObjectParameter("param1", nullValue));
}
else
{
    objectParameterList.Add(new ObjectParameter("param1", param1));
}

context.ExecuteFunction("MyEFModel.sp", objectParameterList.ToArray());

Надеюсь, это поможет.

1 голос
/ 05 мая 2011

Быстрый просмотр, и я нашел это в stackoverflow. Надеюсь, это поможет.

Entity Framework 4.0 Entity SQL передает нулевые параметры ObjectParameter

0 голосов
/ 12 мая 2011

установить значение по умолчанию в хранимой процедуре как NULL.

create procedure sp
    @param1 varchar(30) =NULL
as
select * from table where field = isnull(@param1, field)
...