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的解决方案: 基本上我做了以下三个改变:
实体
类继承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; }
}