1

を設定することができます。は、どのように私はいくつかのクラスを持つエンティティフレームワークで自分の作成したエンティティに多対多の関係

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; } 
    } 

私は自分の作成したクラスValuesMetricsに多対多の関係を作成する必要があり、エンティティフレームワークによってテーブルを自動的に生成しません。私は多くのソリューションを試しましたhereherehereしかし、それは動作しませんでした。結局、私はこれでした:

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 }); 

が、テーブルを作成した(ValuesMetrics)過度の関係(GQMetrics_GQMetric_ID)を持っています。私はValuesから2つだけ主キーとGQMetricsテーブル excessive relationship

あなたはどのようにこの問題を解決するために私にアドバイスすることはできますがありますか?助けてくれてありがとう!すでにあなたが参照したリンクから

答えて

1

応用@Estebanのソリューション:Create code first, many to many, with additional fields in association table

は基本的に私は、次の3つの変更を行った:

  1. 使用済みPOCOエンティティを代わりにEntityクラスから削除
  2. を継承しますとにかく流暢なAPIを使用しているので、EF属性。
  3. 流暢なAPI設定の変更

結果のコード:

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

SIMPLY AMAZING!どうもありがとうございます! – Eluvium

関連する問題