Uitsondering op die skep van 'n EDMX / DB-skedule met behulp van Entity Framework 4 behulp ContextBuilder met 'n generiese klas

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

Vra

Ek gebruik die Microsoft.Data.Entity.CTP (in die Entiteit Raamwerk CTP) onder die NET 4 raamwerk om die EDMX metadata uit my C # klasse te skep om 'n databasis skedule te skep.

Ek opstel van 'n eenvoudige model as sodanig:

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

Ek volg die eenvoudige patroon van die definisie van 'n nuwe ContextBuilder gebaseer op my model.

var builder = new ContextBuilder<AModelContainer>();

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

    context.SaveChanges();
}

Dit werk goed . Tot Ek probeer om iets 'n bietjie meer doen kompleks ...

Ek brei my model met 'n generiese klas

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

Nou op die Save Ek kry 'n uitsondering :

  

Kartering en metadata inligting kon nie gevind word vir EntityType 'Prototype.SpecialClass`1 [[System.String, mscorlib, weergawe = 4.0.0.0, Culture = neutrale, PublicKeyToken = b77a5c561934e089]].

Op hierdie lyn in die AModelContainer

return CreateObjectSet<SpecialClass<string>>();

Die verstek konstruktor van my generiese 'SpecialClass' doen niks op die oomblik, moet dit?

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

Of is dit 'n probleem met die ContextBuilder nie weet wat om te gaan nie, is daar 'n manier om builder.ComplexType (), of ander metode te gebruik om dit te lei?

Of die CTP kan nie hanteer hierdie scenario nog ...

Dit "` 1 "na my klas naam ook nie goed sit met my in die uitsondering ...

Was dit nuttig?

Oplossing

Jy kan nie gebruik generiese klasse as Entiteite met die EF (en by uitbreiding Kode-Net) vandag.

Dit is 'n beperking van die kartering vermoëns tussen die CLR en die konseptuele model.

Post beta2 ons het bygevoeg dat die vermoë om hierdie soort van ding toelaat:

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

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

Waar net Person is 'n "Entiteit" in model die EF se en die eiendom ID van die basis klas opdaag as 'n eiendom van Person.

Maar daar is geen planne in NET 4.0 / EF 4 te ondersteun kartering van 'n generiese klas self aan 'n entiteit in die model.

Hoop dit help

Alex

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top