代码之家  ›  专栏  ›  技术社区  ›  HumbleBeginnings

Automapper:不允许自动创建未明确映射的映射?

  •  1
  • HumbleBeginnings  · 技术社区  · 7 年前

    目前正在使用AutomapperV7.01,并已愉快地使用多年。

    然而,今天我发现了一些非常令人惊讶的事情。显然,即使映射不存在于配置文件中,也可以“动态”创建映射。我想确认一下有没有办法把这个关掉。我查过文件,但似乎找不到确切的答案。

    想知道--添加行 Configuration.MapperConfigurationExpression 喜欢 CreateMissingTypeMaps = 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)()
    

    没有 exist,Automapper将为映射MenuItemChoice-->MenuItemChoice创建一个“动态”(我想)映射。问题在于,当这种情况发生时,当它使用

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

    源记录“srcRec”被“链接”到目标记录,而不是仅仅复制,对目标所做的任何更改(例如将其插入数据库并提交)都会更改,例如源记录和目标记录的Id值。你看到问题了。。。:-(

    我是不是在正确的轨道上 CreateMissingTypeMaps=假 ?

    更新: 添加 CreateMissingTypeMaps=假 到配置 不是 努力解决这个问题。。。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Lucian Bargaoanu    7 年前

    您需要在全局配置中将CreateMissingTypeMaps设置为false,而不是在某些配置文件上。