Automapper: DISALLOW автоматическое создание карт НЕ специально сопоставлено? - PullRequest
0 голосов
/ 24 ноября 2018

В настоящее время я использую AutoMapper V7.01 и восхищенно использую его годами.

Однако сегодня я обнаружил кое-что ОЧЕНЬ удивительное.Очевидно, что сопоставления могут создаваться «динамически», даже если они не существуют в профиле.Я хотел бы подтвердить, если есть способ отключить это.Я проверил документы, но не могу найти окончательного ответа.

Хотите знать, будет ли добавление строки в Configuration.MapperConfigurationExpression, как CreateMissingTypeMaps = False, ответом?Я бы подумал, что FALSE был бы по умолчанию, но, возможно, нет ...

Я бы предпочел, чтобы ошибка произошла для отсутствующей карты, чем для альтернативы.Вот что происходит:

Вот фрагмент моего профиля сопоставления:

Imports AutoMapper
Public Class MappingProfile
    Inherits Profile
    Public Sub New()
        CreateMap(Of MenuItem, MenuItem)()
        CreateMap(Of MenuItemSize, MenuItemSize)()
        CreateMap(Of MenuItemChoice, MenuItemChoice)()
        ...
    End Sub
End Class

Инициализируется так:

Private Sub InitiatizeAutoMapper()
    Dim config As New Configuration.MapperConfigurationExpression : With config
        .AddProfile(Of MappingProfile)()
    End With
    Mapper.Initialize(config)
End Sub

И реализовано так:

 Private Sub CopyMenuItemChoices(menuSetup As MenuCopyData, dbSrc As DataContext, dbTgt As DataContext)
     Dim srcRecs = From b In dbSrc.MenuItemChoices Where b.MenuId = menuSetup.SrcMenuId
     For Each srcRec As MenuItemChoice In srcRecs
         Dim newRec = Mapper.Map(Of MenuItemChoice)(srcRec)
         newRec.MenuId = menuSetup.TgtMenuId
         dbTgt.MenuItemChoices.InsertOnSubmit(newRec) : dbTgt.SubmitChanges()
         WriteXrefRec(menuSetup, srcRec.Id, newRec.Id, Enums.DbTableType.MenuItemChoice, dbSrc, dbTgt)
     Next
     dbSrc.SubmitChanges()
 End Sub

Проблема в (было до тех пор, пока я не добавил конкретное сопоставление), что, если строка в профиле

CreateMap(Of MenuItemChoice, MenuItemChoice)()

DIDN'T существует, Automapper создаст «динамическую» (я полагаю) карту для отображения MenuItemChoice -> MenuItemChoice.Проблема заключается в том, что когда это происходит и когда это реализовано с помощью

Dim newRec = Mapper.Map(Of MenuItemChoice)(srcRec)
newRec.MenuId = menuSetup.TgtMenuId
dbTgt.MenuItemChoices.InsertOnSubmit(newRec) : dbTgt.SubmitChanges()

, исходная запись «srcRec» «связывается» с целевой записью, а не просто копируется и любые изменения вносятся в целевую запись (например,вставка его в базу данных и его передача) изменяет, например, значение Id записи SOURCE, а также целевой записи.Вы видите проблему ... :-(

Я на правильном пути с CreateMissingTypeMaps = False?

ОБНОВЛЕНИЕ: Добавление CreateMissingTypeMaps = False в конфигурацию сделал НЕ работает над устранением этой проблемы ...

1 Ответ

0 голосов
/ 24 ноября 2018

Вам необходимо установить для CreateMissingTypeMaps значение false в глобальной конфигурации, а не в каком-либо профиле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...