使用AutoMapper将DAL属性映射到BLL属性的问题

时间:2009-10-08 13:29:06

标签: vb.net automapper data-access-layer bll

我有一个BLL类,其中包含Country表(CountryCode,CountryName等)中字段的属性。它还有一个属性ioDAL,它是对DAL类(使用SubSonic 2.2创建)的引用,它具有相同的命名字段。

我有一个LoadRecord()方法,它调用DAL的FetchById()方法,通过调用数据库(SQL Server 2005 FWIW)来填充DAL属性。

我当时想要做的是使用AutoMapper(来自CodePlex),而不是编写代码来填充其DAL等效项中的每个BLL属性。我认为该行应该像

Mapper.CreateMap(ioDAL, Me)()

但这会产生错误“类型的值(DAL类/命名空间命名)无法转换为'System.Type'”和“类型的值(BLL类/命名空间命名)无法转换为'System.Type'”

有人可以给我一个关于这个电话应该是什么的指南吗? (VB.NET VS2005)


编辑13-Jan-10 - Jimmy让我展示更多代码:

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

1 个答案:

答案 0 :(得分:1)

首先,您可以考虑使用CreateMap(Of DalType,Of BllType)()重载。除非您在编译时不知道类型(如匿名类型的情况),否则最好在每个应用程序生命周期中,在Main()或Application_Start或其他任何地方配置类型映射。

其次,我解决了AutoMapper尝试验证动态映射的问题,但我把它关掉了。尝试从源代码管理(http://code.google.com/p/automapperhome/)下拉最新版本,看看它现在是否适合你。