Kokujou
Lieutenant
- Registriert
- Dez. 2017
- Beiträge
- 929
Hallihallo
Folgendes Szenario. Um Type-Safety zu gewährleisten und nervige String-Konstanten zu umgehen habe ich in einem Projekt eine Art improvisiertes enum gezaubert und zwar in der Ausführung für string und für guid. Es gibt eine Basis-Klasse z.B. GuidEnum. Die sieht etwa soa su:
}
Nun ein Problem. wnen ich diese Typen in EFCore benutze fällt er erwartungsgemäß auf die Nase.
ich kenne die HasConversion Eigenschaft von Properties, aber dann müsste man für jede Instanz dieser Enum-Klassen diese HasConversion einbauen und das ist ja schonmal schrecklich redundant.
Es gibt einen Reflections-Code mit dem man immerhin über einen For-Loop diese Konverter für alle betroffenen typen in allen deifnierten entties definieren kann - ABER!
genau das funktioniert in meinem Fall nicht. Warum?
1. EFCore scheint meine Property völlig zu verunstalten und statt des abgeleiteten typen, z.B. StatusId : GuidEnum erhalte ich sowas wie StatusIdTemplateId.
2. will ich die Konverter nicht für jeden Konkreten typen definieren sondern es generisch machen. Wenn der BaseType der Property GuidEnum ist, möchte ich einen generischen Konverter mit dem Property-Type als Type-Argument erstellen und ihn der Property zuordnen. Das funktioniert aber so gar nicht, denn der BaseType ist in meinem Fall plötzlich "ValueType".
für MVC Newtonsoft.Json funktioniert das herrlich simpel. und wenig komplex, also hatte ich gehofft bei EFCore gibt es das auch... also dachte ich ich frag mal lieber in die Community ob jemand mit sowas schonmal zutun hatte, oder ob das mal wieder eine unlösbare Aufgabe ist^^
Folgendes Szenario. Um Type-Safety zu gewährleisten und nervige String-Konstanten zu umgehen habe ich in einem Projekt eine Art improvisiertes enum gezaubert und zwar in der Ausführung für string und für guid. Es gibt eine Basis-Klasse z.B. GuidEnum. Die sieht etwa soa su:
C#:
public class GuidEnum
{
private readonly Guid _value;
public GuidEnum(string value)
{
_value = Guid.Parse(value);
}
public static implicit operator string(GuidEnum t)
{
return t._value.ToString();
}
public static implicit operator Guid(GuidEnum t)
{
return t._value;
}
public static T Parse<T>(Guid value) where T : GuidEnum
{
//Reflections are fun
}
}
}
Nun ein Problem. wnen ich diese Typen in EFCore benutze fällt er erwartungsgemäß auf die Nase.
ich kenne die HasConversion Eigenschaft von Properties, aber dann müsste man für jede Instanz dieser Enum-Klassen diese HasConversion einbauen und das ist ja schonmal schrecklich redundant.
Es gibt einen Reflections-Code mit dem man immerhin über einen For-Loop diese Konverter für alle betroffenen typen in allen deifnierten entties definieren kann - ABER!
genau das funktioniert in meinem Fall nicht. Warum?
1. EFCore scheint meine Property völlig zu verunstalten und statt des abgeleiteten typen, z.B. StatusId : GuidEnum erhalte ich sowas wie StatusIdTemplateId.
2. will ich die Konverter nicht für jeden Konkreten typen definieren sondern es generisch machen. Wenn der BaseType der Property GuidEnum ist, möchte ich einen generischen Konverter mit dem Property-Type als Type-Argument erstellen und ihn der Property zuordnen. Das funktioniert aber so gar nicht, denn der BaseType ist in meinem Fall plötzlich "ValueType".
für MVC Newtonsoft.Json funktioniert das herrlich simpel. und wenig komplex, also hatte ich gehofft bei EFCore gibt es das auch... also dachte ich ich frag mal lieber in die Community ob jemand mit sowas schonmal zutun hatte, oder ob das mal wieder eine unlösbare Aufgabe ist^^