目前正在使用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=假
到配置
不是
努力解决这个问题。。。