我有一个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
答案 0 :(得分:1)
首先,您可以考虑使用CreateMap(Of DalType,Of BllType)()重载。除非您在编译时不知道类型(如匿名类型的情况),否则最好在每个应用程序生命周期中,在Main()或Application_Start或其他任何地方配置类型映射。
其次,我解决了AutoMapper尝试验证动态映射的问题,但我把它关掉了。尝试从源代码管理(http://code.google.com/p/automapperhome/)下拉最新版本,看看它现在是否适合你。