MVC 3, EF4, грешка в инициализатора на първата база данни

Имам някои проблеми, когато се опитвам да настроя моята DB с помощта на инициализатор. Имам 3 таблици, LabTest->LabValue‹-LabIndicator, и ето как го кодирам:

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

Ето как кодирах моя Db Intializer в моя DBContext:

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

Работата е там, че когато го стартирам и EF се опитва да създаде базата данни, получавам тази грешка:

Операторът INSERT е в конфликт с ограничението FOREIGN KEY „LabIndicator_LabValues“. Конфликтът възникна в база данни "SummumnetDB", таблица "dbo.LabIndicators", колона "ID". Изявлението е прекратено. Надявам се, че можете да се справите, благодаря.


person Guillermo Oramas R.    schedule 21.07.2011    source източник


Отговори (2)


Звучи ужасно, сякаш нещо не е наред с обвързването на вашия модел. Бихте ли ни предоставили класьора на модела? Ако го нямате, трябва да опитате да го създадете. Освен това можете да проверите intellitrace какво всъщност прави изразът за вмъкване.

person NeroS    schedule 22.07.2011
comment
за този случай не трябваше да създавам binder на модела, ако отида на sql сървър и направя вмъкването ръчно, няма проблем, направено е успешно и разбира се EF създава успешно структурата на базата данни. Дори db да е създаден успешно, все още ли трябва да създам свързващ модел????, благодаря ;) - person Guillermo Oramas R.; 22.07.2011

Редът от вашите вложки в грешен ред ли е?

От вашите класове изглежда, че LabIndicator има препратка към съществуващ LabValue запис.

Опитахте ли да върнете реда в Seed за последните два класа?

от:

new LabTest
new LabIndicator
new LabValue

To

new LabTest
new LabValue
new LabIndicator
person fedej    schedule 17.02.2012