2016-05-15 12 views
1

Ich habe einige Klassen:Wie kann ich konfiguriere viele-zu-viele-Beziehung zu meiner eigenen erstellten Entität in Entity Framework

public class Values : Entity 
    { 
     [Key] 
     public int Values_ID { get; set; }  
     [Required] 
     public string Values_Name { get; set; }  
     [Required] 
     public int ValuesNumeric { get; set; }  
     public virtual ICollection<ValuesMetrics> ValuesMetrics { get; set; } 
    } 

public class GQMetric : Entity 
    { 
     [Key] 
     public int GQMetric_ID { get; set; } 

     [Required] 
     public string GQMetricName { get; set; } 
     [Required] 
     public int Importance_ID { get; set; } 

     public virtual List<GQMetricsQuestions> GQMetricsQuestions { get; set; } 
     public virtual ICollection<ValuesMetrics> ValuesMetrics { get; set; } 

     public virtual ImportanceScale ImportanceScale { get; set; } 
    } 

Ich brauche ValuesMetrics many-to-many-Beziehung zu meiner eigenen erstellen Klasse zu erstellen, nicht automatisch generierte Tabelle für Entitätsframework. Ich habe viele Lösungen here, here und here versucht, aber nichts davon hat nicht funktioniert. Schließlich tat ich:

public class ValuesMetrics : Entity 
    { 
     public int GQMetric_ID { get; set; } 
     public int Value_ID { get; set; } 

     public virtual GQMetric GQMetric { get; set; } 
     public virtual Values Values { get; set; } 
    } 

FluentAPI:

modelBuilder.Entity<ValuesMetrics>() 
       .HasKey(c => new { c.GQMetric_ID, c.Value_ID }); 

      modelBuilder.Entity<GQMetricsQuestions>() 
       .HasKey(c => new { c.GQMetric_ID, c.Question_ID }); 

aber erstellte Tabelle (ValuesMetrics) eine übermäßige Beziehung (GQMetrics_GQMetric_ID). Ich brauche nur zwei Primärschlüssel aus Values und GQMetrics Tabellen excessive relationship

Können Sie mir raten, wie dieses Problem zu lösen? Danke für jede Hilfe!

Antwort

1

Applied @Esteban ‚s-Lösung aus der Verbindung bereits von Ihnen verwiesen: Create code first, many to many, with additional fields in association table

Im Grunde habe ich die folgenden drei Änderungen:

  1. Gebrauchte POCO Einheiten statt erben von Entity Klasse
  2. entfernt EF-Attribute, da wir sowieso fließende API verwenden werden
  3. Geändert fließend API-Konfiguration

resultierende Code:

public class MyContext : DbContext 
{ 
    public DbSet<Values> Values { get; set; } 
    public DbSet<GQMetric> GqMetric { get; set; } 
    public DbSet<ValuesMetrics> ValuesMetrics { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Values>().HasKey(values => values.Values_ID); 
     modelBuilder.Entity<GQMetric>().HasKey(metric => metric.GQMetric_ID); 

     modelBuilder 
      .Entity<ValuesMetrics>() 
      .HasKey(valuesMetrics => new 
      { 
       valuesMetrics.Value_ID, 
       valuesMetrics.GQMetric_ID 
      }); 

     modelBuilder 
      .Entity<ValuesMetrics>() 
      .HasRequired(valuesMetrics => valuesMetrics.Values) 
      .WithMany(valueMetrics => valueMetrics.ValuesMetrics) 
      .HasForeignKey(valueMetrics => valueMetrics.Value_ID); 

     modelBuilder 
      .Entity<ValuesMetrics>() 
      .HasRequired(valuesMetrics => valuesMetrics.GQMetric) 
      .WithMany(valueMetrics => valueMetrics.ValuesMetrics) 
      .HasForeignKey(valueMetrics => valueMetrics.GQMetric_ID); 

     base.OnModelCreating(modelBuilder); 
    } 
} 

public class Values 
{ 
    public int Values_ID { get; set; } 
    public string Values_Name { get; set; } 
    public int ValuesNumeric { get; set; } 
    public virtual ICollection<ValuesMetrics> ValuesMetrics { get; set; } 
} 

public class GQMetric 
{ 
    public int GQMetric_ID { get; set; } 
    public string GQMetricName { get; set; } 

    public virtual ICollection<ValuesMetrics> ValuesMetrics { get; set; } 
} 

public class ValuesMetrics 
{ 
    public int GQMetric_ID { get; set; } 
    public int Value_ID { get; set; } 

    public virtual GQMetric GQMetric { get; set; } 
    public virtual Values Values { get; set; } 
} 
+0

einfach unglaublich! Ich danke dir sehr! – Eluvium