Dapper Orm удалить исключение

Я пытаюсь удалить с помощью dapper orm. Но я получаю это исключение:

При использовании API с несколькими сопоставлениями убедитесь, что вы установили параметр splitOn, если у вас есть ключи, отличные от Id.

Мой код показан ниже:

public void DeleteRole(int ID)
    {
        using (var conn = new SqlConnection(connectionString))
        {
            conn.Open();
            conn.Query("DELETE FROM [Role] WHERE ID=@ID", new {ID=ID });
        }
    }

Есть идеи?


person ftdeveloper    schedule 21.11.2013    source источник
comment
Код изменился резко при вашем редактировании. Это код, который бросает? И почему вы используете здесь Query вместо Execute?   -  person Mike Perrenoud    schedule 21.11.2013
comment
Я обновил свой код. Я отправил неправильный код раньше.   -  person ftdeveloper    schedule 21.11.2013


Ответы (2)


Проблема здесь в том, что вы используете Query вместо Execute. Метод Query пытается найти столбец с именем Id для построения набора результатов и не может, потому что это не запрос.

person Mike Perrenoud    schedule 21.11.2013

Либо укажите тип возвращаемого значения для запроса (целое число)

int rowsCount = conn.Query<int>("DELETE FROM [Role] WHERE ID = @ID", new { ID });

Или используйте метод Execute, как указал Майкл

ПРИМЕЧАНИЕ. Вам не нужно открывать соединение вручную — Dapper откроет его за вас.

Общий запрос BTW будет работать для вашего исходного вопроса:

int id = conn.Query<int>(@"INSERT [Role] (Name, CreatedDate,UpdatedDate) 
                           VALUES (@Name, @CreatedDate,@UpdatedDate) 
                           SELECT CAST(scope_identity() as INT)", model).First();
person Sergey Berezovskiy    schedule 21.11.2013
comment
+1, так как количество затронутых строк может быть хорошим возвращаемым значением. - person Mike Perrenoud; 21.11.2013
comment
@MichaelPerrenoud спасибо :) Уже проголосовал за ваш ответ, потому что он правильный, а Execute возвращает целое число (количество затронутых строк). Параметризованный запрос лучше подходит к исходному вопросу с оператором SELECT - person Sergey Berezovskiy; 21.11.2013