2009-10-08 6 views
0

J'ai une classe BLL qui contient des propriétés pour les champs d'une table de pays (CountryCode, CountryName, etc.). Il a aussi une propriété ioDAL, qui est une référence à une classe DAL (créée avec SubSonic 2.2), qui a les mêmes champs nommés.Problème lors de l'utilisation d'AutoMapper pour mapper les propriétés DAL aux propriétés BLL

J'ai une méthode LoadRecord() qui appelle la méthode FetchById() du DAL qui remplit les propriétés DAL en appelant la base de données (SQL Server 2005 FWIW). Ce que je veux ensuite faire, plutôt que d'écrire du code pour remplir chaque propriété BLL à partir de son équivalent DAL, est d'utiliser AutoMapper (à partir de CodePlex). Je pense que la ligne devrait être quelque chose comme

Mapper.CreateMap(ioDAL, Me)() 

mais cela donne des erreurs « Valeur de type (classe DAL/dénomination d'espace de noms) ne peut pas être converti en« System.Type » et « Valeur de type (classe/espace de noms BLL nommage) ne peut pas être converti en 'System.Type' ".

Quelqu'un peut-il me donner un guide sur ce que devrait être cet appel? (VB.NET VS2005)


EDIT 13-Jan-10 - Jimmy m'a demandé de montrer un peu plus de code:

Imports System 
Imports System.ComponentModel 
Imports AutoMapper 

Public Class Country_POCO_Business 

' Define property as reference to the relevant DAL class 
    Public Property ioDAL() As DAL_VB.Test.Country 
' rest of property definition here... 
    End Property 

    Public Property CountryPk() As String 
' rest of property definition here... 
    End Property 

' and so on for other field properties... 

    Function LoadRecord(ByVal tcPK As String) As Boolean 
     ioDAL = DAL_VB.Test.Country.FetchByID(tcPK) 

     If ioDAL.CountryPk = tcPK Then 

      ' set the values for the B/O properties from the DAL equivalents 
      ' THIS IS WHERE THE ERROR OCCURS... 

      Mapper.CreateMap(ioDAL, Me)() 

      Return True 
     Else 
      Return False 
     End If 

    End Function 
End Class 

Répondre

1

Pour commencer, vous pouvez envisager d'utiliser la CreateMap (de DalType, Of BllType)() surcharge à la place. Sauf si vous ne connaissez pas les types au moment de la compilation (comme c'est le cas avec les types anonymes), il est préférable de configurer vos cartes de type une seule fois par application, dans Main() ou Application_Start ou autre. En second lieu, j'ai corrigé un problème où AutoMapper essaye de valider le mappage dynamique, mais je l'ai enlevé. Essayez d'extraire la dernière version du contrôle de la source (http://code.google.com/p/automapperhome/) et voyez si cela fonctionne pour vous maintenant.

+0

Désolé pour le délai de réponse - nous venons tout juste d'y revenir. J'ai peur que la dernière version du contrôle de source donne toujours la même erreur. Je ne suis pas sûr que je suis votre autre suggestion. Cette application est divisée en plusieurs couches, le code en question est dans la BLL (bibliothèque de classes). Cela peut évidemment être appelé à partir de plusieurs applications, donc je ne sais pas où mettre votre suggestion de surcharge. – kevinw

+0

Pourriez-vous poster un petit extrait de code qui démontre le problème, pour que je puisse le reproduire de mon côté? De plus, une trace de pile m'aiderait vraiment. Merci! –

+0

@Jimmy - très désolé pour le retard dans la réponse, ont été assignés ailleurs dans l'intervalle. J'ai maintenant édité ma question originale pour donner un aperçu de la classe; VS2005 donne les erreurs "Valeur de type DAL_VB.Test ne peut pas être converti en 'System.Type'" et "Valeur de type BLL.Country_POCO_Business ne peut pas être converti en 'System.Type'" sur Mapper.CreateMap (ioDAL, Me) () ligne. – kevinw

Questions connexes