2010-12-13 5 views
0

Ich verwende zuerst CTP5 des Codes. Nehmen Sie die folgende einfache Klasse und zugehörige DbContextEntity Framework - Code Erste verknüpfte Sammlungen in der Datenbank nicht generiert

public class Test 
{ 
    public Test() 
    { 
     Keywords = new Collection<string>(); 
    } 

    public int Id { get; set; } 
    public string Name { get; set; } 
    public ICollection<string> Keywords { get; set; } 
} 

public class TestDbContext : DbContext 
{ 
    public TestDbContext() 
    { 
     Database.Delete(); 
     Database.CreateIfNotExists(); 
    } 

    public DbSet<Test> Tests { get; set; } 

    protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder) 
    {  
     base.OnModelCreating(modelBuilder); 
    } 
} 

Der Typ ‚System.Collections.Generic.ICollection‘ muss ein Nicht-Nullable-Wertetyp sein, um es zu benutzen als Parameter ‚T‘ in gattungs oder Methode ‚System.Data.Entity.ModelConfiguration.Configuration.Types.StructuralTypeConfiguration .Property (System.Linq.Expressions.Expression>)‘

Irgendwelche Ideen, wie die notwendigen Tabellenbeziehungen zwischen Testklasse und den Schlüsselwörtern Eigenschaft erstellen?

Antwort

3

Add Klasse Keyword und ändern ICollection<string> Keywords {get; set;} zu ICollection<Keyword> Keywords {get; set;}

public class Keyword 
{ 
    public string Data {get;set;} 
} 

und Code-Modell wie folgt zu erstellen:

protected override void OnModelCreating(ModelBuilder builder) 
{ 
    builder.Entity<Keyword>() 
     .HasKey(x => x.Data); 
    base.OnModelCreating(builder); 
} 

Man stelle sich vor, dass Sie zwei Sammlungen 1 - Keywords, 2 - Tags. Ihre Realisierung würde es der gleichen Tabelle zuordnen, da im ORM-Mapping-Typ die Entität definiert ist. Und beide Keyword und Tag sind vom Typ String. Um also diese Entitäten zu teilen, sollten Sie Typen aufteilen.

+0

Danke, aber warum muss eine Klasse dafür erstellen? Es gibt keine Möglichkeit, die Beziehung von ICollection abzuleiten? – Fixer

+0

Nicht sicher, aber ich denke, dass Sie Klassen für alle Daten hinzufügen sollten, die Sie speichern, da Sie POCO-Objekte der Datenbank zuordnen, keine Basistypen. –

+0

Danke das funktioniert, aber wie kann ich die Test.Id aus der Stichwörter-Tabelle fallen lassen und die Test-Klasse-Beziehung auf einem FK auf Keywords.Id basieren? – Fixer

Verwandte Themen