Le meilleur moyen d'extraire une relation à plusieurs avec dapper dot net orm?
J'ai deux classes de "Produit" et "Vendeur".
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public Seller Seller { get; set; }
public int? SellerId { get; set; }
}
public class Seller
{
public int Id { get; set; }
public string Name { get; set; }
public List<Product> Products { get; set; }
}
Je veux extraire une liste de Vendeurs avec l'ensemble de leurs produits à l'aide de dapper.
Actuellement, je suis en train de faire comme ceci :
Dictionary<int, Seller> dic = new Dictionary<int, Seller>();
Conn.Query<Seller, Product, int>
(@"select s.*,p.* from Sellers s Join Products p
on p.SellerId = s.Id",
(s, p) => {
if (dic.ContainsKey(s.Id))
dic[s.Id].Products.Add(p);
else
{
s.Products = new List<Product>();
s.Products.Add(p);
dic.Add(s.Id, s);
}
return s.Id;
});
var sellers = dic.Select(pair => pair.Value);
Est-il un meilleur moyen?
source d'informationauteur amin
Vous devez vous connecter pour publier un commentaire.
Je pense que vous mélangez la façon dont vous souhaitez stocker les données avec la façon dont vous voulez l'utiliser. Je suggère de normaliser votre base de données.
Ensuite, vous pouvez interroger le Vendeur et le produit des tables directement.
Puis utiliser linq "group by" pour jeter le Produit dans un dictionnaire
Ensuite, vous pouvez parcourir le SellerWithProductsDict pour voir tous les vendeur des produits, et si vous avez besoin du nom du vendeur venez de le faire par l'indice de la part des Vendeurs résultat de la requête
**************************************
C'est la fin de la réponse, mais si vous avez vraiment besoin de produits mélangés avec les vendeurs, vous pouvez utiliser la même structure de base de données ci-dessus et de faire quelque chose comme:
Puis utiliser linq "groupe" fonctions de jeter que dans un dictionnaire. Je suggère de regarder à cette "Linq groupe-plusieurs champs d'" post pour aider avec le groupe par linq
Mon dernier post est devenu fou pour une raison quelconque.
Tout d'abord, il pourrait être une mauvaise idée pour obtenir tout ce à partir de votre base de données. Vous pourriez envisager de limiter votre requête. Même si votre table est peut être petit maintenant, vous ne voulez pas vous-même contre un mur.
Avec cela étant dit, je vous recommande de simplifier le code pour obtenir les Vendeurs et les Produits en ajoutant des méthodes statiques sur le Vendeur et le Produit.
Gardez à l'esprit, c'est rugueux et ne représente pas tout ce dont vous avez besoin, mais il est plus facile à utiliser sur le long terme et suit la Conception Orientée Objet de mieux que de faire un de Requêtes pour récupérer vos données.
Vous pouvez continuer de développer cette idée en ajoutant des méthodes de requête pour d'autres choses sur le vendeur ou le produit comme GetSellersInZipCode(int code postal) et de retourner une Liste via cette méthode.