[英]Can I use AutoMapper to map between two fields which are immutable?
我有以下兩個類(為簡潔起見,省略了許多屬性)。
服務層POCO:
public class TicketFlag
{
public ContactKey ContactKey;
}
LINQ to SQL生成的POCO:
public class TicketFlag
{
public string ContactKey;
}
嘗試使用AutoMapper在服務調用->數據庫保存這兩者之間映射時,出現以下異常:
Exception of type 'AutoMapper.AutoMapperMappingException' was thrown.
---> System.ArgumentException: Type 'ContactKey' does not have a default constructor
ContactKey沒有故意的默認構造函數。 基本上,它需要一個字符串和一個對象列表,並且可以對自身進行序列化/反序列化。
我嘗試過創建一個映射函數(它是相反的),如下所示:
Mapper.CreateMap<string, ContactKey>().ConvertUsing(s => ContactKeySerializer.Serialize(s));
但是我仍然在抱怨,因為ContactKey沒有默認的構造函數。
有沒有一種方法可以使AutoMapper不使用默認構造函數進行屬性映射? 確實,僅在ContactKey上映射屬性是不夠的-我需要讓它調用構造函數,或者從我的ContactKeySerializer類中吐出來。
首先,您可能應該將屬性用於這些東西,而不是字段。 但是,我懷疑這是您的問題的一部分。
與其嘗試創建從string
到ContactKey
的映射, ContactKey
嘗試將這一部分從一個TicketFlag
映射到另一個TicketFlag
:
Mapper.CreateMap<LINQtoSQL.TicketFlag, Service.Layer.TicketFlag>()
.ForMember(dest => dest.ContactKey,
mem => mem.ResolveUsing(src => ContactKeySerializer.Serialize(src.ContactKey)));
我認為這樣可以防止您遇到錯誤。
AutoMapper抱怨您沒有默認的構造函數,因為AutoMapper需要先創建目標類的空實例,然后才能將值映射到它。 它無法調用您的ContractKey的參數化構造函數-它將如何?
在這種情況下,如果構造函數如下所示,則看起來很簡單:
public ContracktKey(string keyValue){}
但是,如果有兩個參數怎么辦?
public ContracktKey(string keyValue, string otherValue){}
它怎么知道將價值放在哪里? 如果您只提供一個字符串怎么辦?
我認為最好聽從別人的建議,並映射兩個TicketFlag
對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.