答案:CreateMissingTypeMaps
必須設置爲true
才能使動態映射工作。帶有動態類型的AutoMapper:缺失類型映射配置或不支持映射
public IEnumerable<T> GetDummies<T>(IEnumerable<dynamic> dummies)
{
var config =
new MapperConfiguration(c => { c.CreateMissingTypeMaps = true; });
IMapper mapper = config.CreateMapper();
return dummies.Select(mapper.Map<T>).ToList();
}
我周圍的包裝實體框架執行查詢數據庫。我想讓用戶只選擇需要的屬性,但保留實體類型的結果。
這是假的代碼(不使用EF,但有相同的問題)
class Program
{
static void Main(string[] args)
{
var dummies = new[]
{
new DummyContainer
{
Name = "First",
Description = "First dummy",
DummyNumbers = new List<int> { 1, 2, 3 },
Foo = new FooThingy { Title = "Foo thingy" }
}
};
var smallDummies = dummies.Select(d => new { d.Name }).ToList();
List<DummyContainer> fullDummies = smallDummies.Select(Mapper.Map<DummyContainer>).ToList();
Debugger.Break();
}
}
class DummyContainer
{
public string Name { get; set; }
public string Description { get; set; }
public ICollection<int> DummyNumbers { get; set; }
public FooThingy Foo { get; set; }
}
class FooThingy
{
public string Title { get; set; }
}
獲取此異常:
Missing type map configuration or unsupported mapping.
Mapping types:
<>f__AnonymousType0`1 -> DummyContainer
<>f__AnonymousType0`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] -> AutoMapperWithGenerics.DummyContainer
Destination path:
DummyContainer
Source value:
{ Name = First }
我有點困在這裏,因爲文檔指出AutoMapper使用性質名稱映射回對象:Dynamic and ExpandoObject Mapping。
請注意,上面的代碼是例子。在我的應用程序中,事實上有點瘋狂,因爲我實際上在使用泛型,例如
Mapper.Map<TEntity>
...它應該保持這種狀態 - 我不知道使用了哪種實體類型。我的期望是:將屬性映射到現有類型,如果缺失,請設置default(T)
。
編輯:我試圖從dynamic
指定映射到T
,幾乎全碼在這裏:
class Program
{
static void Main(string[] args)
{
// ...
var dumminator = new DummyService();
IEnumerable<DummyContainer> bigDummies = dumminator.GetDummies<DummyContainer>(smallDummies);
Debugger.Break();
}
}
class DummyService
{
public IEnumerable<T> GetDummies<T>(IEnumerable<dynamic> dummies)
{
var config = new MapperConfiguration(c => c.CreateMap<dynamic, T>());
IMapper mapper = config.CreateMapper();
return dummies.Select(mapper.Map<T>).ToList();
}
}
...這將不會例外死,但結果是拼命空(所有屬性有default
值。
感謝您以這種方式指向我,您的建議已棄用,但我能夠找到如何通過配置對象設置此選項。 –
對,這是一種過時的方式。 [這裏](https://github.com/AutoMapper/AutoMapper/wiki/Migrating-from-static-API)是一個關於配置這個更好的方法的文檔(正如我看到的,你已經找到了)。我很樂意提供幫助。 – MaKCbIMKo