2

Ich erstelle neue Modelle, für die EF die Datenbank generieren wird. Models sieht wie folgt aus:Entity Framework CTP5, Code-First. Hilfe beim Erstellen von Referenztabellen über das Objektmodell

public class Model 
{ 
    public int Id { get; set; } 
    public string StyleNumber { get; set; } 
    public virtual IList<Metal> Metals { get; set; } 
    public virtual IList<ModelImage> Images { get; set; } 
} 

public class Metal 
{ 
    public int Id { get; set; } 
    public string Description { get; set; } 
} 

Ich würde Metall wie eine Referenztabelle sein w/den beiden Säulen, das Feld „Beschreibung“ einzigartig zu sein. Stattdessen erstellt EF die Metaltabelle mit einer zusätzlichen Spalte, die auf die Modell-ID verweist. Gibt es eine einfache Möglichkeit, das Verhalten über Datenanmerkungen oder die flüssige API zu ändern?

Antwort

3

EF denkt, Sie haben eine Eins-zu-viele-Beziehung zwischen Modell & Metall und die einfachste Möglichkeit zu modellieren ist, indem Sie die Modell-ID in der Tabelle Metall speichern. Wenn Sie die Metaltabelle "sauber" halten möchten (d. H. Keine Beziehungsdaten), müssen die Beziehungsdaten in einer separaten Tabelle gespeichert werden. Dadurch ändern Sie aber auch implizit die Beziehung zwischen Modell & Metal. Wenn Sie das wirklich durchmachen wollen, dann können Sie EF sagen, dass Sie eine Einweg-Viele-zu-Viele-Beziehung zwischen Modell & Metal wollen. Das können Sie in der OnModelCreating-Funktion von DbContext so machen.

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Model>().HasMany(o => o.Metals).WithMany(); 
} 
1

Steven K Antwort ist korrekt für die auf der Metall Tabelle mit dem Fremdschlüsseleintrag zu entfernen, aber es ist nicht eindeutig zuzuordnen Voraussetzung für das desctiption Feld erzwungen wird. Das ist aber nicht seine Schuld, denn leider hat EF Code First noch keine eindeutige Constraint Annotation.