即使使用正确的“splitOn”,Dapper也不会填充实体?

时间:2017-02-11 18:29:28

标签: c# sql-server dapper .net-4.6

查看简化的 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
 )

正如您所看到的,我将从CommentsUsers 加上一些int值返回所有列。

我知道我不能像这样返回int值,我需要返回一个实体。

这就是为什么我创建了这个虚拟类来保存int值的原因:

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

正如您所看到的,它是泛型类型的一部分:

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

所以基本上我采取CommentUserSqlInt并将其全部放入CommentWithSenderAndUserId2

问题出在哪里?

我的虚拟类的int值永远不会被填充,它总是0(其他实体填充得很好)

enter image description here

I did read this post(正如我在SP中所做的那样)我应该添加一个拆分列,例如:

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

问题

我做错了什么,如何填写myInt值?

1 个答案:

答案 0 :(得分:1)

好吧,我发现了我的愚蠢错误 问题是我创建了一个实体来保存int值,对吗?

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

该属性的名称为MyIntValue。如果是这样,为什么我这样做:

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

而不是正确的方法:

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

现在我确实看到了正确的价值。