#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-скрипт, который будет корректно вставлять данные с существующими внешними ключами. Я делал это много раз. Сохраните вашу логику инициализации вместе.