Asp.net mvc 3 MVC 3,EF4,代码优先数据库初始值设定项错误

Asp.net mvc 3 MVC 3,EF4,代码优先数据库初始值设定项错误,asp.net-mvc-3,ef-code-first,dbcontext,Asp.net Mvc 3,Ef Code First,Dbcontext,我在尝试使用初始值设定项设置数据库时遇到了一些问题。我有3个表,LabTest->LabValue context.LabTest.Add(l)); 新名单 { 新的LabIndicator{Name=“chosterol”,Description=“chosterol lvl”}, 新的LabIndicator{Name=“血红蛋白”,Description=“血红蛋白lvl”}, 新的LabIndicator{Name=“GLUCOSE”,Description=“GLUCOSE lvl”}

我在尝试使用初始值设定项设置数据库时遇到了一些问题。我有3个表,LabTest->LabValue context.LabTest.Add(l)); 新名单 { 新的LabIndicator{Name=“chosterol”,Description=“chosterol lvl”}, 新的LabIndicator{Name=“血红蛋白”,Description=“血红蛋白lvl”}, 新的LabIndicator{Name=“GLUCOSE”,Description=“GLUCOSE lvl”}, }.ForEach(l=>context.LabIndicators.Add(l)); 新名单 { 新的LabValue{LabTestID=1,LabIndicationId=1,Value=2.3m}, 新的LabValue{LabTestID=1,LabIndicationId=2,Value=5.8m}, 新的LabValue{LabTestID=1,LabIndicationId=3,Value=5.2m}, 新的LabValue{LabTestID=2,LabIndicationId=1,Value=6.7m}, 新的LabValue{LabTestID=2,LabIndicationId=2,Value=9.8m}, 新的LabValue{LabTestID=2,LabIndicationId=3,Value=4.3m}, }.ForEach(l=>context.LabValue.Add(l)); 种子(上下文); } } 问题是,当我运行它,EF尝试创建数据库时,我得到以下错误:

INSERT语句与外键约束“LabIndicator_LabValues”冲突。冲突发生在数据库“SummumnetDB”、表“dbo.LabIndicators”、列“ID”中。
声明已终止。希望你能解决,谢谢

听起来你的模型绑定好像出了问题。你能给我们提供活页夹模型吗?如果你没有,你应该试着创建一个。此外,您可以检查intellitrace insert语句实际执行的操作。

insert的顺序是否错误

从类中可以看出,
LabIndicator
引用了现有的
LabValue
记录

您是否尝试过恢复最后两个类的
Seed
中的顺序

发件人:


对于这种情况,我不需要创建模型绑定器,如果我转到sql server并手动进行插入,就没有问题了,插入成功了,当然EF成功地创建了数据库的结构。即使数据库创建成功,我还需要创建一个模型绑定器吗??,thanxs;)
public class LabTest
    {
        public int ID { get; set; }
        public DateTime ApplicationDate { get; set; }
        public virtual ICollection<LabValue> LabValues { get; set; }
    }

public class LabValue
    {
        public int ID { get; set; }
        public decimal Value { get; set; }
        public int LabTestID { get; set; }
        public int LabIndicatorID { get; set; }
        public virtual LabTest LabTest { get; set; }
        public virtual LabIndicator LabIndicator { get; set; }
    }

  public class LabIndicator
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public virtual ICollection<LabValue> LabValues { get; set; }
    }
public class SummumnetDB : DbContext
{
  public DbSet<LabIndicator> LabIndicators { get; set; }
  public DbSet<LabTest> LabTests { get; set; }
  public DbSet<LabValue> LabValues { get; set; }

  public class MyFirstInitializer : DropCreateDatabaseIfModelChanges<SummumnetDB> 
  { 
     protected override void  Seed(SummumnetDB context)
     {
          new List<LabTest>
          {
               new LabTest{ ApplicationDate = DateTime.Now},
               new LabTest{ ApplicationDate = DateTime.Now},
          }.ForEach(l => context.LabTest.Add(l));

           new List<LabIndicator>
           {
                new LabIndicator{ Name="CHOLESTEROL", Description = "Cholesterol lvl"},
                new LabIndicator{ Name="HEMOGLOBIN", Description = "Hemoglobin lvl"},
                new LabIndicator{ Name="GLUCOSE", Description = "Glucose lvl"},
           }.ForEach(l => context.LabIndicators.Add(l));

           new List<LabValue>
           {
                new LabValue{ LabTestID = 1, LabIndicatorID = 1, Value = 2.3m },
                new LabValue{ LabTestID = 1, LabIndicatorID = 2, Value = 5.8m },
                new LabValue{ LabTestID = 1, LabIndicatorID = 3, Value = 5.2m },
                new LabValue{ LabTestID = 2, LabIndicatorID = 1, Value = 6.7m },
                new LabValue{ LabTestID = 2, LabIndicatorID = 2, Value = 9.8m },
                new LabValue{ LabTestID = 2, LabIndicatorID = 3, Value = 4.3m },
           }.ForEach(l => context.LabValue.Add(l));

           base.Seed(context);
     }
}
new LabTest
new LabIndicator
new LabValue
new LabTest
new LabValue
new LabIndicator