Могут ли засеянные данные использовать последовательность HiLo? - PullRequest
0 голосов
/ 06 декабря 2018

См. Класс ниже:

public class UndergraduateEntityTypeConfiguration : IEntityTypeConfiguration<Undergraduate>
    {
        public void Configure(EntityTypeBuilder<Barclaycard> undergraduateConfiguration)
        {
            undergraduateConfiguration.HasData(
               new Undergraduate(1, "Undergraduate")
               );
        }
    }

и код ниже:

public class StudentEntityTypeConfiguration : IEntityTypeConfiguration<Student>
    {
        public void Configure(EntityTypeBuilder<CreditCard> studentConfiguration)
        {
            studentonfiguration.ToTable("Student", StudentContext.DEFAULT_SCHEMA);
            studentConfiguration.HasKey(o => o.Id);
            studentConfiguration.Property(o => o.Id)
                .ForSqlServerUseSequenceHiLo("studentseq", StudentContext.DEFAULT_SCHEMA);
           studentConfiguration.HasDiscriminator<string>("Type")
                .HasValue<Graduate>("Graduate")
                .HasValue<Vanquis>("Undergraduate");

        }
    }

Обратите внимание, что в поле идентификатора студента (в таблице ученика) используется последовательность HiLo.Однако в UndergraduateEntityTypeConfiguration я должен явно передать идентификационный номер в конструктор Undergraduate, чтобы добавить запись Undergraduate в таблицу Student.

Код работает должным образом.Тем не менее, я не понимаю, почему я должен пройти идентификацию (1) самостоятельно.Есть ли способ создания записи бакалавриата, как это:

undergraduateConfiguration.HasData(
               new Undergraduate("Undergraduate")
               );

Обратите внимание, что на этот раз ID не передается в конструктор.Если я делаю это, то вижу ошибку, которая говорит: «Начальный объект для типа объекта« Бакалавриат »не может быть добавлен, потому что для требуемого свойства« Id »не было предоставлено значение».

1 Ответ

0 голосов
/ 06 декабря 2018

Нет.Это специальное требование для заполнения данных EF Core с помощью HasData (он же данные начального заполнения модели ), исходящих из конструкции функции.

Это не характерно для столбцов, генерируемых последовательностью HiLo, но все автоматически сгенерированные столбцы (включая наиболее часто используемые столбцы с автоинкрементом (идентификатором) и последовательностью базы данных).Объяснение в документации следующее (обратите особое внимание на первый пункт):

Этот тип начальных данных управляется миграциями, и сценарий для обновления данных, уже находящихся в базе данных, долженгенерироваться без подключения к базе данных.Это накладывает некоторые ограничения:

  • Значение первичного ключа необходимо указывать, даже если оно обычно генерируется базой данных.Он будет использоваться для обнаружения изменений данных между миграциями.
  • Ранее заполненные данные будут удалены при любом изменении первичного ключа.

Если это проблема дляВы подумываете о переходе на более традиционный способ заполнения данных .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...