#database #asp.net-core #entity-framework-core
#База данных #asp.net-core #entity-framework-core
Вопрос:
Я использую подход, ориентированный на базу данных, для генерации моделей из существующей базы данных. Для этого я успешно запускаю эту команду
Scaffold-DbContext "Server=(localdb)mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
Я получаю все модели и контекстный файл.
Проблема:
Когда я пытаюсь извлечь данные из базы данных, используя Context.tableName, заполняются все значения модели, кроме реляционных полей. Например
public DateTime? DateCreation { get; set; }
public double? Discount { get; set; }
public double? Rate { get; set; }
public DateTime? DateModified { get; set; }
public virtual Packaging Packaging { get; set; }
Здесь Packaging
всегда остается нулевым, даже если данные существуют в связанной таблице для этой записи. Вот соответствующий код из контекстного файла
entity.HasOne(d => d.Packaging)
.WithMany(p => p.PackagingLogs)
.HasForeignKey(d => d.PackagingId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_PackagingLogs_Packaging");
Возможно, мне чего-то не хватает, но у меня это никогда не работает ни в одной модели. Помощь будет оценена. Спасибо
Комментарии:
Ответ №1:
Вообще говоря, вы должны либо с готовностью, либо явно загрузить взаимосвязь. У вас это не произойдет автоматически. Например:
_context.Foos.Include(x => x.Packaging)
Вместо этого вы можете выбрать отложенную загрузку, но это должно быть явно включено:
services.AddDbContext<MyContext>(o => o.UseLazyLoadingProxies()
.UseSqlServer(myConnectionString));
Однако отложенная загрузка в конечном итоге приведет к выдаче запроса для отношения JIT (как раз вовремя) при обращении к свойству reference. Это означает, что вы можете легко получить сценарий запроса N 1, в котором вы в конечном итоге будете засыпать свою базу данных спамом с запросами. Вы всегда должны с готовностью загружать любые отношения, которые вы собираетесь использовать с Include
в качестве предпочтительного подхода.