僅當我使用ProjectTo時出現錯誤,我無法理解潛在問題。 (使用4.2.1.0的Automapper版本) 「LINQ to Entities不支持指定的類型成員'Tags' 僅支持初始化程序,實體成員和實體導航屬性。 我們也可以在DTO中進行這種操作,但我應該堅持只在實體一側進行操作。 讓我知道的方式或解決我可以處理這個問題,而無需升級版本。 TIA 我希望實體的Tags屬性的計算值需要映射到DTO的Tags屬性,但是當我以正常方式進行時,此功能正常工作。當在源中使用NotMapped/Computed屬性映射到目標時,Automapper ProjectTo <>()問題
源/目的地類型
public class Template : IEntity<int>
{
public string Name { get; set; }
public int Id { get; set; }
public string _Tags { get; set; }
[NotMapped]
public List<string> Tags
{
get { return _Tags == null ? null : JsonConvert.DeserializeObject<List<string>>(_Tags); }
set { _Tags = JsonConvert.SerializeObject(value); }
}
}
實體配置
internal sealed class TemplateConfig : EntityTypeConfiguration<Template>
{
public TemplateConfig()
{
Ignore(x => x.Tags);
HasKey(x => x.Id)
.Map(m =>
{
m.ToTable("Template");
m.Property(x => x.Id).HasColumnName("ID");
m.Property(x => x.Name).HasColumnName("Name");
m.Property(x => x._Tags).HasColumnName("Tags");
});
}
}
目的地DTO:
public class Template
{
public int Id { get; set; }
public string Name { get; set; }
public List<string> Tags { get; set; }
}
映像配置
Mapper.CreateMap<Template, DTO.Template>();
Mapper.CreateMap<DTO.Template, Template>();
//These are just for information, but getting error only when using ProjectTo. (Ignore about the OData thing)
public virtual async Task<IQueryable<TDto>> Get(ODataQueryOptions<TDto> query)
{
try
{
var expands = query.GetExpandedPropertyNames();
//Assume the collection has the data from db
var test = Collection.ToList();
//getting the exception here
return await Collection.ProjectTo<TDto>(null, expands).AsTask();
}
catch(Exception ex)
{
throw ex;
}
}
//Controller method
public override async Task<IQueryable<Template>> Get(ODataQueryOptions<Template> query)
{
try
{
List<Template> result = (await base.Get(query)).ToList();
return result.AsEnumerable().AsQueryable();
}
catch(Exception ex)
{
throw ex;
}
}
是的,使用Mapper.Map它可以工作,但是我的問題只能用於ProjectTo。我不能廢除這個實現,我需要堅持到ProjectTo只有一些調整是好的。這種情況是否完全不受Automapper支持,還是在最近的版本中修復過,或者我做錯了什麼? –
不需要將邏輯複製到Map中。您可以將Map設置爲從_Tags屬性中讀取,然後在那裏反序列化它。 Automapper無法自動爲您執行此操作。 – lxalln
謝謝你的回答。我通過在使用ProjectTo之前添加ToList來解決此問題,但不確定這是否是正確的修復方法。 (將它轉換爲列表,雖然會影響性能)我想在處理計算值,Json序列化或NotMapped屬性時,自動映射器沒有問題。 像這樣的工作。 'var test = Collection.ToList()。AsQueryable(); 返回等待測試。ProjectTo(null,expandeds).AsTask();' –