Ausnahme auf die Schaffung eines EDMX / DB-Schema Entity Framework 4 unter Verwendung von ContextBuilder mit einer generischen Klasse
-
19-09-2019 - |
Frage
Ich bin mit der Microsoft.Data.Entity.CTP (im Entity Framework CTP) unter .NET 4 Framework die EDMX Metadaten aus meinem C # -Klassen erstellen einem Datenbankschema zu erstellen.
ich Setup ein einfaches Modell wie zum Beispiel:
public class AModelContainer : ObjectContext
{
public IObjectSet<RegularClass> RegularClasses {
get { return CreateObjectSet<RegularClass>(); }
}
}
Ich folge dem einfachen Muster ein neues ContextBuilder der Definition basiert auf meinem Modell.
var builder = new ContextBuilder<AModelContainer>();
using(var context = builder.Create(new SqlConnection(connString)))
{
context.RegularClasses.AddObject(new RegularClass());
context.SaveChanges();
}
Dies funktioniert . Bis Ich versuche, etwas zu tun, ein wenig komplexe ...
erweitere ich mein Modell mit einer generischen Klasse
public class AModelContainer : ObjectContext
{
public IObjectSet<SpecialClass<string>> SpecialClasses {
get { return CreateObjectSet<SpecialClass<string>>(); }
}
}
Jetzt auf den Speicher erhalte ich eine Ausnahme :
Mapping und Metadaten-Informationen nicht für EntityType 'Prototype.SpecialClass`1 [[System.String Mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089]]' gefunden werden.
Auf dieser Linie in dem AModelContainer :
return CreateObjectSet<SpecialClass<string>>();
Der Defaultkonstruktor meiner generic ‚Sonderklasse‘ tut nichts zur Zeit, sollte es?
public class SpecialClass<T>
{
public SpecialClass()
{ }
}
Oder ist dies ein Problem mit dem ContextBuilder nicht zu wissen, was genau zu tun ist, ist es eine Möglichkeit, builder.ComplexType () zu verwenden oder eine andere Methode, um es zu führen?
oder die CTP kann nicht mit diesem Szenario befassen noch ...
Die "` 1 " nach meinen Klassennamen nicht sitzt auch nicht gut mit mir in Ausnahme ...
Lösung
Sie können nicht verwenden generische Klassen als Entitäten mit dem EF (und durch Erweiterung-Code-Only) heute.
Dies ist eine Einschränkung der Mapping-Funktionen zwischen dem CLR und konzeptionellen Modell.
Post Beta2 wir hinzugefügt, um die Fähigkeit, diese Art der Sache zu ermöglichen:
public class Entity<TKey>
{
public TKey ID {get;set;}
}
public class Person: Entity<int>
{
public string Firstname {get;set;}
public string Surname {get;set;}
}
Wo nur Person
ist ein ‚Entity‘ in das Modell der EF und die ID
Eigenschaft der Basisklasse zeigt sich als eine Eigenschaft von Person
.
Aber es gibt keine Pläne in .NET 4.0 / EF 4 zur Unterstützung der Kartierung einer generische Klasse selbst zu einer Entität im Modell.
Hope, das hilft
Alex