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

У меня возникают проблемы при попытке установить мою БД с помощью инициализатора. У меня есть 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)


Ужасно звучит так, будто что-то не так с привязкой вашей модели. Не могли бы вы предоставить нам переплет модели? Если у вас его нет, попробуйте его создать. Кроме того, вы можете проверить интеллектуальную трассировку, что на самом деле делает оператор вставки.

person NeroS    schedule 22.07.2011
comment
для этого случая мне не нужно было создавать связыватель модели, если я перейду на сервер sql и сделаю вставку вручную, проблем не будет, это будет сделано успешно, и, конечно, EF успешно создаст структуру базы данных. Даже если БД создана успешно, мне все еще нужно создать связыватель модели????, спасибо;) - 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