2017-02-11 3 views
2

この簡素化 SQL Serverのクエリを見て:あなたは私がすべてのreturnningよ見ることができるようにDapperは、右の `splitOn`を使っても、エンティティを埋めませんか?

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 
) 

:私はSPを実行するには、この部分的に取り組んコードを使用してい

set @userid2=... 

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

    FROM Comments c 
      JOIN Users u 
       ON ... 

列は両方ともCommentsUsersプラスいくつかint値です。

私はintの値を返すことができないことを知っています。エンティティを返す必要があります。なぜ私はint値を保持するために、このダミーのクラスを作成しましただ

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

をそして、あなたが見ることができるように、それは一般的なタイプの一部です:したがって、基本的

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

I CommentUserSqlIntと入れてください。CommentWithSenderAndUserId2

So問題はどこだ ?私は、スプリッタの列を追加する必要があることを

私のダミークラスのint型の値が満たされることは決してありませんし、それは常に0です(他のエンティティがうまく埋め)

enter image description here

I did read this post(私はSPで行ったように)以下のような:

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

質問

私は何が間違っているのですか?myIntの値はどのようにして埋められますか?

答えて

1

まあ、私は愚かな間違いを見つけました。
intの値を保持するエンティティを作成したという問題はありましたか?

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

プロパティの名前はMyIntValueです。もしそうなら、なぜ私はこれをしました:

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

むしろ正しいアプローチより:

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

今、私はその正しい値を参照ください。

関連する問題