le mappage multiple dans Dapper est-il soigné par rapport à l'ordre des colonnes de sqlstr?

dapper orm

Question

par exemple:

voici mes pocos:

public class product
{
    public int productid { set; get; }
    public category category { set; get; }
    public string productname { set; get; }
}

aussi la catégorie:

public class category
{
    public int categoryid { set; get; }
    public string categoryname { set; get; }
    public string Description { set; get; }
}

et le sqlstr:

select p.ProductID, p.ProductName, c.CategoryName, c.CategoryID,  c.Description 
from Products p inner join Categories c 
on p.CategoryID=c.CategoryID

si je choisis "c.CategoryID" en tant que splitOn. alors c.CategoryName ne sera pas assigné, donc j'ai changé l'ordre de la colonne:

select p.ProductID, p.ProductName, c.CategoryID,  c.CategoryName, c.Description ...

cette fois tout va bien.

Suis-je mal compris, toute aide sera acceptable.

THX.

Réponse acceptée

En fait, je pense que vous devez utiliser "CategoryID" pour séparer, pas "c.CategoryID" , car les résultats ne permettent pas de voir les alias ( c. ). Mais, pour expliquer: la fonctionnalité "split on" partitionne un ensemble horizontal de résultats en plusieurs parties. Par exemple, si nous avons:

Id    A    B    Id    C    D   Id    E    F

et nous nous sommes séparés sur "Id" , puis nous avons:

Id    A    B         |      Id    C    D        |       Id    E    F

(notez que le "split" peut être composé de plusieurs noms de colonnes différents, il n’a pas besoin d’être identique à chaque fois)

Donc: dans chaque partition horizontale - non, l'ordre n'a pas d'importance. Mais: si les colonnes "split" sont positionnées de telle sorte qu'une colonne ( CategoryName ) se retrouve dans la mauvaise partition , alors oui, cela compte. Ce comportement est dû au fait que les noms de colonne ne doivent pas nécessairement être uniques - il ne peut donc pas simplement rechercher CategoryName - qui peuvent ne pas être liés; il doit rechercher CategoryName dans la partition correcte .

Dans votre exemple spécifique: déplacez la colonne ou utilisez simplement CategoryName comme nom de partage (en gros, il suffit de connaître la première colonne de la partition).




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi