могу ли я запросить контекст из начального метода инициализатора контекста

#ef-code-first #entity-framework-4.1

#ef-code-first #entity-framework-4.1

Вопрос:

Я инициализирую свою базу данных из множества sql-скриптов. Затем я хотел бы запрашивать данные при добавлении дополнительных данных, чтобы совпадали отношения внешнего ключа. Тем не менее, в моем примере переменная «painting» всегда заканчивается нулем, даже если данные есть. Возможно ли запросить данные внутри этого начального метода? Должен ли я фиксировать данные или что-то еще?

 class ArtConvergenceInitializer : DropCreateDatabaseIfModelChanges<ArtConvergence>
    {
        protected override void Seed(ArtConvergence context)
        {            

            var seedfilePath = System.Configuration.ConfigurationManager.AppSettings["PathToInitializationScript"].ToString();
            foreach(var file in System.IO.Directory.EnumerateFiles(seedfilePath,"*.sql"))
            {
                var sqlCommand = System.IO.File.ReadAllText(file);
                context.Database.ExecuteSqlCommand(sqlCommand);
                context.SaveChanges();
            }

            var painting = context.Mediums.Where(x => x.MediumType == "Painting" amp;amp; x.SpecificMedium == null).FirstOrDefault();
            var oilOnCanvas = context.Mediums.Where(x => x.MediumType == "Painting" amp;amp; x.SpecificMedium == "oil on canvas").FirstOrDefault();              

        }
  

Комментарии:

1. Я знаю, что вы можете, потому что я тоже это делаю. Я не думаю, что вам нужно вызывать SaveChanges после ExecuteSqlCommand. не глядя на ваш скрипт, я не уверен, почему это не вернет вам данные. Сценарий завершается и вставляется?

Ответ №1:

После того, как вы используете прямые SQL-скрипты, не должно быть слишком сложно написать SQL-скрипт, который будет корректно вставлять данные с существующими внешними ключами. Я делал это много раз. Сохраните вашу логику инициализации вместе.