我目前使用automapper在我的後端映射對象模型。 我最近決定使用下面的代碼來處理我的所有時區轉換:Automapper項目使用
cfg.CreateMap<DateTime?, DateTime?>()
.ProjectUsing(i => DbFunctions.AddHours(i, offset.Hours));
cfg.CreateMap<DateTime, DateTime>()
.ProjectUsing(i => DbFunctions.AddHours(i, offset.Hours).Value);
Object.ProjectTo<ObjectModel>().SingleOrDefault();
然後正常工作和對象映射,當我用我的生意下面的代碼時區轉換
然而層做一個單一的對象映射:
Mapper.Map<Object, ObjectModel>(singleRecord);
它提供了一個錯誤: 該功能只能從LINQ調用實體。
堆棧跟蹤:
at System.Data.Entity.DbFunctions.AddHours(Nullable`1 timeValue, Nullable`1 addValue)
at lambda_method(Closure , DateTime , DateTime , ResolutionContext)
at AutoMapper.ResolutionContext.Map[TSource,TDestination](TSource source, TDestination destination)
at lambda_method(Closure , Inventory , InventoryModel , ResolutionContext)
Mapper.Map是在特定情況下使用很重要,我也不想對項目單記錄。
是有辦法解決這?
嘿@ivan,感謝您的回答,我認爲它的工作,我在我們發言時實施它。 – DaGeek
您能否向我解釋一些事情: 項目是否正在使用數據庫級別運行? 是否使用在Cpu級別上運行進行轉換? EF Canonical功能意味着什麼? – DaGeek
(1)EF Canonical函數是'DbFunctions'中的函數。正如你注意到的,它們並不意味着被執行。就像'IQueryable'表達式樹內已知的「佔位符」,EF查詢翻譯器將它們映射到SQL查詢中相應的數據庫函數調用。(2)是的,因爲'ConvertUsing'接收到一個'Func <...>'(讀取代碼),它不能映射到SQL,所以它被'Map'方法所使用,這些方法在內存對象中操作。 –