2017-02-11 4 views
2

bei dieser Abfrage vereinfachte SQL Server sucht:Dapper füllt keine Entity, auch nicht mit dem richtigen `SplitOn`?

set @userid2=... 

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

    FROM Comments c 
      JOIN Users u 
       ON ... 

ich dies die SP auszuführen teilweise arbeiten Code:

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 
) 

Wie Sie bin ich Returnning alle sehen Säulen sowohl von Comments als auch UsersPLUS einige int Wert.

Nun, ich weiß, dass ich einen Wert int nicht einfach so zurückgeben kann, muss ich eine Entität zurückgeben.

Deshalb habe ich diese Dummy-Klasse erstellt haben einen int Wert zu halten:

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

Und wie Sie sehen können, ist es Teil der generischen Typen:

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

I Also im Grunde sind ein Comment, User, SqlInt nehmen und alles in CommentWithSenderAndUserId2

setzt So Wo ist das Problem ?

Der int Wert meiner Dummy-Klasse wird nie gefüllt und es ist immer 0 (andere Einheiten gefüllt just fine)

enter image description here

I did read this post (in meinem SP wie ich), dass ich eine -Splitterkolonne hinzufügen sollte wie zum Beispiel:

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

Frage

Was mache ich falsch und wie bekomme ich meinen Wert gefüllt?

Antwort

1

Nun, ich fand meinen dummen Fehler.
Problem war, dass ich eine Entität erstellt habe, um einen int Wert zu halten, richtig?

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

Der Name der Eigenschaft ist MyIntValue. Wenn ja, warum habe ich das:

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

Anstatt dem richtigen Ansatz:

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

Nun weiß ich, dass richtigen Wert sehen.

Verwandte Themen