MVC 3, EF4, Ошибка кода инициализации первой базы данных - PullRequest
0 голосов
/ 22 июля 2011

У меня проблемы с настройкой БД с помощью инициализатора.У меня есть 3 таблицы, LabTest-> LabValue <-LabIndicator, и вот как я кодирую это: </p>

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".Заявление было прекращено.Надеюсь, ты справишься, спасибо.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2012

Не верен ли заказ из ваших вкладышей?

Из ваших классов видно, что LabIndicator имеет ссылку на существующую запись LabValue.

Вы пытались изменить порядок в Seed для последних двух классов?

От:

new LabTest
new LabIndicator
new LabValue

До

new LabTest
new LabValue
new LabIndicator
0 голосов
/ 22 июля 2011

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

...