Ausnahme auf die Schaffung eines EDMX / DB-Schema Entity Framework 4 unter Verwendung von ContextBuilder mit einer generischen Klasse

StackOverflow https://stackoverflow.com/questions/1912333

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 ...

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top