Проблема с использованием AutoMapper для сопоставления свойств DAL со свойствами BLL - PullRequest
0 голосов
/ 08 октября 2009

У меня есть класс BLL, который содержит свойства для полей в таблице Country (CountryCode, CountryName и т. Д.). Он также имеет свойство ioDAL, которое является ссылкой на класс DAL (созданный с помощью SubSonic 2.2), который имеет поля с такими же именами.

У меня есть метод LoadRecord (), который вызывает метод DAL FetchById (), который заполняет свойства DAL путем вызова базы данных (SQL Server 2005 FWIW).

То, что я затем хочу сделать, вместо того, чтобы писать код для заполнения каждого свойства BLL из его эквивалента DAL, - это использовать AutoMapper (из CodePlex). Я думаю, что строка должна быть что-то вроде

Mapper.CreateMap(ioDAL, Me)()

, но это приводит к ошибкам «Значение типа (именование класса / пространства имен DAL) не может быть преобразовано в« System.Type »» и «Значение типа (именование класса / пространства имен BLL) не может быть преобразовано в« System.Type » .

Может кто-нибудь дать мне руководство относительно того, каким должен быть этот звонок? (VB.NET VS2005)


РЕДАКТИРОВАТЬ 13-Jan-10 - Джимми попросил меня показать еще немного кода:

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 Ответ

1 голос
/ 16 октября 2009

Перво-наперво, вы можете вместо этого использовать перегрузку CreateMap (Of DalType, Of BllType) (). Если вы не знаете типы во время компиляции (как в случае с анонимными типами), лучше настроить карты типов только один раз за время жизни приложения, в Main () или Application_Start или как угодно.

Во-вторых, я исправил проблему, когда AutoMapper пытается проверить динамическое сопоставление, но я снял ее. Попробуйте вытащить последнюю версию из системы контроля версий (http://code.google.com/p/automapperhome/) и посмотрите, подходит ли она вам сейчас.

...