В настоящее время я использую 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
в конфигурацию сделал НЕ работает над устранением этой проблемы ...