C# 如何在实体框架中配置与自己创建的实体的多对多关系

C# 如何在实体框架中配置与自己创建的实体的多对多关系,c#,sql-server,entity-framework,ef-code-first,many-to-many,C#,Sql Server,Entity Framework,Ef Code First,Many To Many,我有一些课程: 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 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; }
    }
弗伦塔皮:

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

            modelBuilder.Entity<GQMetricsQuestions>()
               .HasKey(c => new { c.GQMetric_ID, c.Question_ID });
modelBuilder.Entity()
.HasKey(c=>new{c.GQMetric_ID,c.Value_ID});
modelBuilder.Entity()
.HasKey(c=>new{c.GQMetric_ID,c.Question_ID});
但是创建的表(
ValuesMetrics
)具有过度的关系(GQMetrics\u GQMetric\u ID)。我只需要
Values
GQMetrics
表中的两个主键


你能告诉我如何解决这个问题吗?谢谢你的帮助

从您已经引用的链接中应用@Esteban的解决方案:

基本上我做了以下三个改变:

  • 使用POCO实体,而不是从
    实体
    类继承
  • 删除了EF属性,因为我们将使用fluent API
  • 更改了fluent 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; }
    }
    
    公共类MyContext:DbContext
    {
    公共数据库集值{get;set;}
    公共DbSet GqMetric{get;set;}
    公共数据库集值矩阵{get;set;}
    模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
    {
    modelBuilder.Entity().HasKey(值=>values.values\u ID);
    modelBuilder.Entity().HasKey(metric=>metric.GQMetric\u ID);
    建模者
    .实体()
    .HasKey(valuesMetrics=>new
    {
    valuesMetrics.Value\u ID,
    valuesMetrics.GQMetric_ID
    });
    建模者
    .实体()
    .HasRequired(valuesMetrics=>valuesMetrics.Values)
    .WithMany(valueMetrics=>valueMetrics.ValuesMetrics)
    .HasForeignKey(valueMetrics=>valueMetrics.Value\u ID);
    建模者
    .实体()
    .HasRequired(valuesMetrics=>valuesMetrics.GQMetric)
    .WithMany(valueMetrics=>valueMetrics.ValuesMetrics)
    .HasForeignKey(valueMetrics=>valueMetrics.GQMetric_ID);
    基于模型创建(modelBuilder);
    }
    }
    公共阶级价值观
    {
    公共int值_ID{get;set;}
    公共字符串值\u Name{get;set;}
    公共int值数值{get;set;}
    公共虚拟ICollection ValuesMetrics{get;set;}
    }
    公共类GQMetric
    {
    公共int GQMetric_ID{get;set;}
    公共字符串GQMetricName{get;set;}
    公共虚拟ICollection ValuesMetrics{get;set;}
    }
    公共类价值计量学
    {
    公共int GQMetric_ID{get;set;}
    公共int值_ID{get;set;}
    公共虚拟GQMetric GQMetric{get;set;}
    公共虚拟值{get;set;}
    }
    
    简直太棒了!非常感谢你!
    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; }
    }