Что если вам не нужен параметр при обращении к Dapper? - PullRequest
0 голосов
/ 23 августа 2011

У меня есть один запрос, который делает подсчет / группу, где мне не нужен параметр (здесь нет условия where).

Каков синтаксис для запуска запроса без параметров с помощью dapper?

var _results = _conn.Query<strongType>("Select Count(columnA) as aCount, ColumnB, ColumnC from mytable group by ColumnB, ColumnC");

не работает.

Я пробовал это несколькими разными способами, но я все еще продолжаю получать "ArgumentNullException не обрабатывается кодом пользователя".

Пытался сам разобраться, все искал и я даювверх.Заранее спасибо.

Редактировать: Ниже приведена строка кода из SqlMapper.cs, которая выдает ошибку.Это строка 1334

il.Emit(OpCodes.Newobj, typeof(T).GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, Type.EmptyTypes, null));

Сведения об ошибке: значение не может быть нулевым.Имя параметра: con

Ответы [ 4 ]

4 голосов
/ 24 августа 2011

Отображение одного результата обратно работает просто отлично:

var a = cnn.Query<int>("select 1").Single()
// a is 1

Вы можете столкнуться с проблемой, если ваш запрос не даст результатов, например:

select count(Id) from 
(
select top 0 1 as Id, 2 as Title
) as X
group by Title

вернет 0 результатов, поэтомуSingle на пустом наборе результатов не будет работать.

0 голосов
/ 25 июля 2016

Эта ошибка может возникать, поскольку свойство, которое вы пытаетесь установить в возвращаемом объекте, имеет значение get-only . Даппер, конечно же, требует умения устанавливать все свойства. Вы можете рассмотреть возможность создания отдельного объекта DTO базы данных, который после чтения из базы данных преобразуется в ваш правильно неизменяемый объект домена.

Изменить это:

public string MyProperty { get; }

к этому:

public string MyProperty { get; set; }
0 голосов
/ 23 августа 2012

Значение не может быть нулевым.Имя параметра: con

Эта ошибка вызывается несколькими динамическими ORM, включая Dappper, PetaPoco и Massive, но обычно это та же проблема: убедитесь, что вы используете атрибут [Ignore] для свойств, которые вы не делаетехочу включить.Это включает в себя свойства, унаследованные от базовых классов.Ошибка бесполезна, но вот что это значит.

0 голосов
/ 23 августа 2011

1001 * попробовать *

var _results = _conn.Query("Select columnB, Count(columnA) C from mytable group by columnB");

int ColumnB = ((int)_results[0].ColumnB);
int C = ((int)_results[0].C);
...