Dapper не заполняет сущность даже с правильным `splitOn`?

Глядя на этот упрощенный запрос SQL Server:

set @userid2=...

SELECT *,
       SPLIT = '',
       userid2 = @userid2

    FROM   Comments c
           JOIN Users u
                ON  ...

Я использую этот частично рабочий код для выполнения SP:

 await c.QueryAsync<Comment, User, SqlInt, CommentWithSenderAndUserId2>(@"insertCommentByImageId",
(message1, user, myint) => new CommentWithSenderAndUserId2 
                                {
                                  User = user,
                                  Comment = message1, 
                                  UserId2 = myint.MyIntValue
                                },
  new {imageid = imageId, userid1 = userid1, comment = comment}, //parms
  splitOn: "UserID,split",  //splits
  commandType: CommandType.StoredProcedure //command type
 )

Как видите, я возвращаю все столбцы как из Comments, так и из Users ПЛЮС некоторое значение int.

Ну, я знаю, что я не могу просто так вернуть значение int, мне нужно вернуть сущность.

Вот почему я создал этот фиктивный класс для хранения значения int:

public class SqlInt
    {
        public int MyIntValue { get; set; }
    }

И, как вы можете видеть, это часть универсальных типов:

c.QueryAsync<Comment, User, SqlInt, CommentWithSenderAndUserId2>

Так что в основном я беру Comment , User, SqlInt и помещаю все это в CommentWithSenderAndUserId2

Так в чем проблема?

Значение int моего фиктивного класса никогда не заполняется, и оно всегда равно 0 (другие объекты заполняются просто отлично)

введите изображение  описание здесь

Я прочитал этот пост (как и в своем SP), что я должен добавить столбец-разделитель, например:

   SELECT *, 
           SPLIT = '',       <----------- Here
           userid2 = @userid2

Вопрос

Что я делаю неправильно и как мне заполнить значение myInt?


person Royi Namir    schedule 11.02.2017    source источник


Ответы (1)


Что ж, я нашел свою глупую ошибку.
Проблема заключалась в том, что я создал объект для хранения значения int, верно?

  public class SqlInt
    {
        public int MyIntValue { get; set; }
    }

Имя свойства MyIntValue. Если да, то зачем я это сделал:

SELECT *,
           SPLIT = '',
           userid2 = @userid2

Вместо правильного подхода:

SELECT *,
           SPLIT = '',
           MyIntValue = @userid2 <---- change is here

Теперь я вижу это правильное значение.

person Royi Namir    schedule 11.02.2017