Eccezione sulla creazione di un EDMX / DB-Schema utilizzando Entity Framework 4 utilizzando ContextBuilder con una classe generica

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

Domanda

Sto utilizzando il Microsoft.Data.Entity.CTP (in Entity Framework CTP) nel quadro .NET 4 per creare i metadati EDMX dalle mie classi C # per creare uno schema di database.

I ha installato un modello semplice in quanto tale:

public class AModelContainer : ObjectContext
{
    public IObjectSet<RegularClass> RegularClasses { 
        get { return CreateObjectSet<RegularClass>(); }
    }
}

seguo il modello semplice di definire una nuova ContextBuilder basata sul mio modello.

var builder = new ContextBuilder<AModelContainer>();

using(var context = builder.Create(new SqlConnection(connString)))
{
    context.RegularClasses.AddObject(new RegularClass());

    context.SaveChanges();
}

Questo funziona bene . Fino che cerco di fare qualcosa di un po 'più complesso ...

Estendo il mio modello con una classe generica

public class AModelContainer : ObjectContext
{
    public IObjectSet<SpecialClass<string>> SpecialClasses { 
        get { return CreateObjectSet<SpecialClass<string>>(); }
    }
}

Ora sul risparmio ottengo un eccezione :

  

Informazioni Mappatura e metadati non è stata trovata per EntityType 'Prototype.SpecialClass`1 [[System.String, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089]]'.

In questa riga nel AModelContainer :

return CreateObjectSet<SpecialClass<string>>();

Il costruttore di default della mia generica 'SpecialClass' non fa nulla in questo momento, dovrebbe?

public class SpecialClass<T> 
{
    public SpecialClass()
    { }
}

O si tratta di un problema con il ContextBuilder , non sapendo cosa fare esattamente, c'è un modo per utilizzare builder.ComplexType (), o altro metodo per guidarlo?

O il CTP non può occuparsi di questo scenario ancora ...

Questo "` 1 " dopo il mio nome della classe, inoltre, non mi sta bene in salvo ...

È stato utile?

Soluzione

Non è possibile utilizzare classi generiche come entità con l'EF (e per estensione Codice-Only) di oggi.

Questa è una limitazione delle funzionalità di mapping tra il CLR e il modello concettuale.

Post Beta2 abbiamo aggiunto la possibilità di permettere questo genere di cose:

public class Entity<TKey>
{
   public TKey ID {get;set;}
}

public class Person: Entity<int>
{
   public string Firstname {get;set;}
   public string Surname {get;set;}
}

Dove solo Person è un 'entità' nel modello della EF, e la proprietà ID dalla classe base si presenta come una proprietà di Person.

Ma non ci sono piani in .NET 4.0 / EF 4 per supportare la mappatura di una classe generica per sé ad un'entità nel modello.

Spero che questo aiuti

Alex

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top