2016-08-06 35 views
0

Ich richte ein Modell für ein Projekt ein und alles funktioniert wie erwartet, abgesehen von der Änderung unten. Ich dachte, es wäre nett, den Typ als Type anstelle seiner Beschreibung als string zu spezifizieren.Warum kann ich keine Eigenschaft vom Typ in mein Modell für Entity Framework eingeben?

namespace DataBase.Entities 
{ 
    public class Lock 
    { 
    public Guid Id { get; set; } 
    public DateTime? Occasion { get; set; } 
    public int Counter { get; set; } 
    public Type Entity { get; set; } 
    //public string Entity { get; set; } 
    } 
} 

Rate mal was! EF hat es nicht ein bisschen gemocht. Der Fehler, den ich beim Hinzufügen einer expliziten Migration erhalte, ist wie folgt und ich habe keine Ahnung warum.

System.ArgumentNullException: Der Wert darf nicht null sein.
Parametername: EntitySet

Die meisten der goolearching ergab people Entdeckung, dass die POCO-Klassen eine gewisse Erbschaft hatten sie etwa vergessen. Someone vorgeschlagen, erneut aktivierte Migrationen zu erzwingen. Ich habe überhaupt keine Vererbung im Modell und die Erzwingung der Migrationen gab nichts als eine neu erstellte Konfigurationsdatei.

Antwort

3

Ich würde immer den assemblyqualifizierten Typnamen anstelle des Typs selbst speichern.

A Type Instanz es ist nicht nur ein Name, sondern eine Menge von Metadaten, die während der Laufzeit interessant sein können, aber es wäre sinnlos zu speichern (das heißt serialize) eine Art Instanz wie.

Wenn Sie die ganze Type Eigenschaft erhalten Type.AssemblyQualifiedName Eigenschaftswert:

instance.Type = typeof(X).AssemblyQualifiedName; 

Und den Code, der wieder Type.GetType(lock.Type) mit der ganzen Art funktionieren sollte zum Aufbau einer Type Beispiel nennen könnte.

+0

Ich sehe Ihren Standpunkt und ich finde den Vorschlag gut motiviert. Trotzdem würde ich gerne wissen, warum ich nicht die ganze Instanz vom Typ * System.Type * speichern kann (nicht warum ich nicht ** sondern warum ich ** nicht ** kann). Außerdem würde ich gerne ein wenig Erklärung sehen, wie dieses Problem zu dieser Fehlermeldung führen kann. –

+0

@konradviltersten im Grunde ist EF ein ORM, das eine relationale Datenbank abstrahiert. Wenn Type ein komplexer Typ ist, wie erwartet man dann, dass EF eine Type-Instanz speichert, ohne sie zu serialisieren? Macht EF das standardmäßig mit Referenztypen ohne Strings? –

+0

Guter Punkt, Kumpel. Ich habe damit gerechnet, dass EF die Reflexion nutzt, um alle öffentlichen Eigenschaften in allen Entitäten herauszufinden, die sich in meinem Kontext befinden oder auf die eine oder andere Weise erwähnt werden. Ich denke, es war ein bisschen zu viel von einer Wunschvorstellung für automagische Operationen. Gute Erklärung. –