Pourquoi dapper renverrait-il des valeurs de compte et des valeurs nulles correctes?

c# dapper

Question

Je voulais jouer un peu avec dapper donc créé deux classes qui représentent la base de données et une petite requête de jointure interne, mais pour une raison quelconque, les résultats sont nuls. Je suis nouveau sur Dapper, donc d'après ce que j'ai lu dans les documents et une bonne réponse sur SO ( Comment écrire une à plusieurs requêtes dans Dapper.Net? ), Il semble que cette configuration soit correcte. Pourquoi le compte de résultat serait-il correct, mais les valeurs sont toutes nulles?

 con.Open();
    string query = @"select Orders.OrderID as OrderID,
                     Orders.OrderNumber as Orders_OrderNumber,
                     Product.ProductNumber as Product_ProductNumber,
                     Product.ProductID as Product_ProductID,
                     Product.OrderID as Product_OrderID
                     from Orders INNER JOIN Product ON Orders.OrderID = Product.OrderID WHERE Orders.OrderNumber LIKE '%" + orderNumber + "%'";
    dynamic data = con.Query<dynamic>(query);
    Slapper.AutoMapper.Configuration.AddIdentifiers(typeof(Orders), new List<string> { "OrderID" });
    Slapper.AutoMapper.Configuration.AddIdentifiers(typeof(Product), new List<string> { "ProductID" });

    var orders = (Slapper.AutoMapper.MapDynamic<Orders>(data) as IEnumerable<Orders>).ToList();
    //var orders = Slapper.AutoMapper.Map<Orders>(data);
    return orders; // count is correct but values are null

Des classes:

 public class Product
    {
        public int ProductID { get; set; }
        public int OrderID { get; set; }
        public string ProductNumber { get; set; }
    }

 public class Orders
    {
        public int OrderID { get; set; }
        public string OrderNumber { get; set; }
        public List<Product> Products { get; set; }
    }

Toute aide serait grandement appréciée.

Merci!

Réponse acceptée

J'imagine que votre mappeur ne fonctionne pas comme prévu. Entrez dans votre mappeur et assurez-vous qu'il fonctionne comme prévu.


Réponse populaire

Les meilleures méthodes d'utilisation des mappeurs automatiques sont les instructions Assert, en particulier dans le cas du mappage d'objets dynamiques. Voir cet exemple . Cela pourrait vous aider à trouver un problème.

En outre, jetez un coup d’œil au code source de Mapper ci-dessous:

public TDestination Map<TDestination>(object source, Action<IMappingOperationOptions> opts)
    {
        var mappedObject = default(TDestination);
        if (source != null)
        {
            var sourceType = source.GetType();
            var destinationType = typeof(TDestination);

            mappedObject = (TDestination)Map(source, sourceType, destinationType, opts);
        }
        return mappedObject;
    }

Il semble qu'il retournera la valeur par défaut de T lorsqu'une collection vide est renvoyée.



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