2016-06-25 16 views
1

Ich habe ein Entity Framework-Modell mit einer Liste Mitglied:Seed Entity Framework-Modell mit Mitgliederliste

public class MyModel 
{ 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public int Points { get; set; } 
     public List<Feature> Features { get; set; } 
} 

Wo Feature eine Enumeration ist.

Ich habe eine Seed() Methode in meiner Konfiguration mit einem Objektliteral:

new MyModel 
{ 
    Id = 1, 
    Name = "Test Name", 
    Points = 2, 
    Features = ??? 
} 

Wie kann ich Eigenschaften als wörtliche Liste initialisieren?

+1

Die Antworten zu sehen (bisher) niemand scheint zu bemerken, dass Sie eine 'Liste ' in der Datenbank nicht speichern können. Denken Sie darüber nach, welchen Datentyp das Zieldatenbankfeld haben soll. 'Feature' muss eine Klasse sein, die einer eigenen Tabelle zugeordnet ist. –

+0

Mögliches Duplikat: http://Stackoverflow.com/q/32072732/861716 –

+0

Danke @GertArnold - komplette Amateurstunde für mich, vergiss 'enum' mit Entity Framework. Ich habe meine Antwort unten aktualisiert, die nun die Frage von OP lösen sollte: –

Antwort

0

es eine Liste von Aufzählungs initialisieren

var model = new MyModel 
     { 
      Id = 1, 
      Name = "Test Name", 
      Points = 2, 
      Features = new List<Feature> 
      { 
       Feature.Feature1, 
       Feature.Feature2 
      } 
     }; 
+1

Falsch. 'Liste ' kann nicht in der Datenbank gespeichert werden. –

1

Wie kann ich Eigenschaften als wörtliche Liste initialisieren?

UPDATE
Wie ganz zu Recht von @Gert, können Sie nicht Aufzählungen direkt in einer EF Datenbank (Oh, drats) verwenden.

Ein enum wird jedoch durch einen int dargestellt, so dass der Wert weiterhin in der Datenbank gespeichert werden kann, indem eine Klasse verwendet wird.

Sie müssen eine Klasse erstellen, um die Werte in der Datenbank zu speichern, und dann können Sie aus der Klasse MyModel darauf verweisen.

So:

public enum TypesOfFeature // The enum of features 
{ 
    One = 1, 
    Two = 2, 
    Three = 3 
    ... // etc. 
} 

public class Feature // The class to map to a table in your DB 
{ 
    public int Id { get; set; } 
    public TypesOfFeature Type { get; set; } 
} 

hinzufügen DbSet<Feature> an Ihrem Code-first-Modell, so dass Sie diese von Ihrem DB zugreifen können. Etwas wie public DbSet<Feature> Features { get; set; } wird tun.

Es könnte eine gute Idee sein, die Werte manuell in die Datenbank aufzunehmen, damit Sie wissen, dass ihre IDs mit dem Wert int des Enums übereinstimmen. * Sie könnte dies mit AddOrUpdate im Seed() Methode tun - dann, wenn Sie mehr hinzufügen müssen, können Sie sie unter *

Sie müssten fügen Sie die Feature s Sie wollen, von der DB, um dann zurückzukehren Weisen Sie sie Ihrer MyModel.Features Eigenschaft zu.

Wie so:

Feature featureOne = YourDbContext.Features.Single(x => x.Type == TypesOfFeature.One); 
Feature featureTwo = YourDbContext.Features.Single(x => x.Type == TypesOfFeature.Two); 
Feature featureThree = YourDbContext.Features.Single(x => x.Type == TypesOfFeature.Three); 

Dann wird in dem Code, wo Sie Ihre MyModel Objekt initialisiert wird, können Sie dann die List<Feature> initialisieren, vorbei in den erforderlichen Feature Objekte gezogen Sie oben aus:

var model = new MyModel 
{ 
    Id = 1, 
    Name = "Test Name", 
    Points = 2, 
    Features = new List<Feature> 
       { 
        featureOne, 
        featureTwo, 
        featureThree 
       } 
} 

Offensichtlich weiß ich nicht, welche Werte Sie in Ihrem Featureenum haben, aber oben ist nur ein Beispiel.

Hoffe, das hilft!:)

+0

Wie kann ich 'Feature' in den' MyModel'-Seeds verwenden? Ich füge "Feature" -Objekte im Seed mithilfe von 'context.Features.AddOrUpdate' hinzu. Ich mache dann 'context.SaveChanges()' gefolgt von 'context.MyModel.AddOrUpdate', dem ich ein' neues MyModel {, Features = neue Liste {context.Features.Single (x => x.Type = = TypesOfFeature.One)}} '. Das Problem ist, dass wenn ich 'MyModel' Objekte aus' Kontext' schnappe, sie eine leere 'Features' Liste haben. – user3728304

+0

Wo genau ist es versuchen Sie 'MyModel.Features' zu verwenden und dieses Problem zu bekommen? Und welche Art von Programm schreibst du (App, MVC etc.)? Sind die 'Features' leer oder' null'? –

+0

Ich habe eine Konsolenanwendung, der ich das Entity Framework hinzugefügt habe. Von meiner Hauptmethode erstelle ich einen Kontext und erhalte ein Objekt, indem ich 'var firstMyModel = context.MyModel.First()' das Problem mache 'firstMyModel.Features' ist' null' – user3728304

0
static void Main(string[] args) 
    { 
     MyModel mm = new MyModel(); 

     mm.Id = 1; 
     mm.Name = "user3728304"; 
     mm.Points = 1; 
     mm.Features = new List<Feature>{Feature.one, 
         Feature.two, 
         Feature.three}; 

     Console.Read(); 
    } 
+1

Falsch. 'Liste ' kann nicht in der Datenbank gespeichert werden. –

+0

@GertArnold Sie können es in einer anderen Tabelle speichern, sagen Model_Feature bu mit Model ID und Feature, ein bis viele Relation B \ w Modell und Feature. –

+0

Ja, aber deine Antwort nicht. –

Verwandte Themen