Exception sur la création d'un EDMX / DB-schéma à l'aide Entity Framework 4 en utilisant ContextBuilder avec une classe générique

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

Question

J'utilise le Microsoft.Data.Entity.CTP (dans Entity Framework CTP) dans le cadre .NET 4 pour créer les métadonnées EDMX de mes classes C # pour créer un schéma de base de données.

Configuration I un modèle simple en tant que tel:

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

Je suis le modèle simple de définir un nouveau ContextBuilder basé sur mon modèle.

var builder = new ContextBuilder<AModelContainer>();

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

    context.SaveChanges();
}

Cela fonctionne bien . Jusqu'à J'essaie de faire quelque chose d'un peu plus complexe ...

Je tends mon modèle avec une classe générique

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

Maintenant le sauver je reçois une exception :

  

Cartographie et métadonnées n'a pu être trouvée pour EntityType 'Prototype.SpecialClass`1 [[System.String, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089]].

Sur cette ligne dans le AModelContainer :

return CreateObjectSet<SpecialClass<string>>();

Le constructeur par défaut de mon générique SpecialClass 'ne fait rien à l'heure actuelle, devrait-il?

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

Ou est-ce un problème avec le ContextBuilder ne sachant pas quoi faire exactement, est-il un moyen d'utiliser builder.ComplexType (), ou une autre méthode pour le guider?

Ou le CTP ne peut pas faire face à ce scénario encore ...

Ce "` 1 " après mon nom de classe ne cadre pas bien avec moi aussi à l'exception ...

Était-ce utile?

La solution

Vous ne pouvez pas utiliser des classes génériques comme entités avec l'EF (et par extension de code uniquement) aujourd'hui.

Ceci est une limitation des capacités de mappage entre le CLR et le modèle conceptuel.

Poster Beta2, nous avons ajouté la possibilité de permettre ce genre de chose:

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

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

Si seulement Person est une « entité » dans le modèle de l'EF, et la propriété ID de la classe de base apparaît comme une propriété de Person.

Mais il n'y a pas de plans dans .NET 4.0 / EF 4 pour soutenir la cartographie elle-même une classe générique à une entité dans le modèle.

Hope this helps

Alex

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top