Qu'est-ce que Automapper pour? Comment cela va-t-il m'aider avec mon domaine et contrôleur de couche (asp.net mvc)À quoi sert Automapper?
Répondre
Peut-être un exemple va aider ici ...
Disons que vous avez un schéma de base de données bien normalisée comme ceci:
Orders (OrderID, CustomerID, OrderDate) Customers (CustomerID, Name) OrderDetails (OrderDetID, OrderID, ProductID, Qty) Products (ProductID, ProductName, UnitPrice)
Et disons que vous utilisez une belle O/R mappeur qui vous remet de nouveau un modèle de domaine bien organisé:
OrderDetail +--ID +--Order |--+--Date |--+--Customer |-----+--ID |-----+--Name +--Product |--+--ID |--+--Name |--+--UnitPrice +--Qty
maintenant, vous avez donné une exigence pour afficher tout ce qui a été commandé dans e Le dernier mois. Vous voulez lier à un réseau plat, de sorte que vous écrivez une classe docilement plat pour lier:
public class OrderDetailDto
{
public int ID { get; set; }
public DateTime OrderDate { get; set; }
public int OrderCustomerID { get; set; }
public string OrderCustomerName { get; set; }
public int ProductID { get; set; }
public string ProductName { get; set; }
public Decimal ProductUnitPrice { get; set; }
public int Qty { get; set; }
public Decimal TotalPrice
{
get { return ProductUnitPrice * Qty; }
}
}
C'était assez indolore jusqu'à présent, mais maintenant? Comment pouvons-nous transformer un tas de OrderDetail
s en un tas de OrderDetailDto
s pour la liaison de données?
Vous pouvez mettre un constructeur sur OrderDto
qui prend un OrderDetail
, et écrire un gros désordre de code de mappage. Ou vous pourriez avoir une classe de conversion statique quelque part. Ou, vous pouvez utiliser AutoMapper et écrire à la place:
Mapper.CreateMap<OrderDetail, OrderDetailDto>();
OrderDetailDto[] items =
Mapper.Map<OrderDetail[], OrderDetailDto[]>(orderDetails);
GridView1.DataSource = items;
Il. Nous venons de prendre ce qui aurait été un désordre dégoûtant de code de mappage inutile et l'avons réduit en trois lignes (en réalité seulement deux pour le mappage réel).
Est-ce que cela aide à expliquer le but?
Presque tout. Si vous en savez plus sur la puissance de Automapper, je suis sûr que les gens vont upvote ... –
Si vous avez un objet d'un type et que vous voulez remplir les propriétés d'un objet d'un autre type en utilisant les propriétés du premier type, vous avoir deux choix:
- Écrivez manuellement le code pour faire un tel mappage.
- Utilisez un outil qui va gérer cela automatiquement pour vous.
AutoMapper est un exemple de 2.
L'utilisation la plus courante consiste à aplatir les modèles en un objet de transfert de données (ou, en général, la cartographie à travers les frontières de la couche). Ce qui est très bien avec AutoMapper, c'est que pour les scénarios courants, vous n'avez pas besoin de faire de configuration (convention over configuration).
Mapper les objets entre les calques. Bon exemple: Here
La question en double/liée possible (mais inclut un bon exemple) est –
Voici une bonne explication: http: // www. kunal-chowdhury.com/2013/01/what-is-automapper-and-how-to-map-objects.html – JoshYates1980