In meinem Projekt habe ich eine LINQ abfragbare (eigentlich eine EF6-Sammlung), die ich in eine Sammlung von Datenübertragungsobjekten konvertieren muss. Ich verwende AutoMapper
während des gesamten Projekts, vor allem wegen seiner Fähigkeit, eine Typ-Projektion durchzuführen, wodurch die Menge an SQL reduziert wird, die von der Linq-Abfrage generiert wird.AutoMapper löst Ausnahme bei der Projektion auf NULL-Enum
Aber ich habe ein kleines Problem mit einer meiner DTO-Klassen. Die zugehörige Datenbankspalte enthält eine Nullable-Zeichenfolge, die ich einer nullfähigen Enumeration zuordnen möchte. Zur Laufzeit wird jedoch eine Ausnahme ausgelöst
Kein Zwangsoperator ist zwischen den Typen 'System.String' und 'System.Nullable`1 [AutomapperEnumTest.Method] definiert.
Hier ist ein komplettes Testprogramm, das das Problem veranschaulicht: (siehe .Net Fiddle)
using System;
using System.Linq;
using AutoMapper;
using AutoMapper.QueryableExtensions;
namespace AutomapperEnumTest
{
public class Program
{
public static void Main()
{
Configure();
var src = new SourceType[] { new SourceType { Name = "Rob", MethodName = "AUTO" } };
var results = src.AsQueryable()
.ProjectTo<DestType>();
foreach(var item in results)
{
Console.WriteLine(String.Format("DestType Name={0} Method={1}", item.Name, item.Method));
}
Console.WriteLine("Done");
}
private static void Configure()
{
Mapper.Initialize(cfg =>
{
cfg.CreateMap<string, Method?>().ProjectUsing(src => src == "MANUAL" ? Method.MANUAL : Method.AUTO);
cfg.CreateMap<SourceType, DestType>()
.ForMember(dest => dest.Method, opt => opt.MapFrom(src => src.MethodName));
});
}
}
public enum Method
{
MANUAL=0,
AUTO=1
}
public class DestType
{
public string Name {get; set; }
public Method? Method {get; set; }
}
public class SourceType
{
public string Name {get; set; }
public string MethodName {get; set; }
}
}
Nun, wenn ich die Eigenschaft Method?
-Method
es funktioniert ändern (diese Änderung in .Net Fiddle sehen). Aber ich möchte das nicht tun, also ist meine Frage, wie informiere ich Linq/AutoMapper, dass es meine ProjectUsing
für die Nullable enum verwenden sollte?
Vielen Dank.
Vielen Dank für die Bereitstellung einer solchen vollständigen Antwort. Ich habe es getestet und das löst das Problem. – Rob