Как заполнить основные данные во время метода «OnModelCreating» DbContext в случае, если включен автоматически сгенерированный первичный ключ? - PullRequest
0 голосов
/ 24 ноября 2018

Application Framework: ASPNET Core 2.1

Это мой класс

public class Employee
{
    [DataMember(Name = "key")]
    [Key]
    public Guid Key { get; set; }
    [Required]
    [DataMember(Name = "Name")]
    public string Name { get; set; }
}

У меня есть код ниже, который позволяет заполнять данные и автоматически генерировать Guid столбец

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        //Auto generation of Guid
        modelBuilder.Entity<Employee>().Property(x => x.Key).HasDefaultValueSql("NEWID()");

        //seeding of data
        modelBuilder.Entity<Employee>().HasData(
            new Employee{ Name = "Hamlet" },
            new Employee{ Name = "King Lear" },
            new Employee{ Name = "Othello" }
        );
    }

Я получаю приведенную ниже ошибку при выполнении команды add-migration InitialCreate

Невозможно добавить начальный объект для типа объекта «Сотрудник», поскольку для требуемого свойства «Ключ» не задано значение'.

Я не хочу отправлять значение для Key.Я хочу, чтобы он автоматически генерировался в базе данных SQL Server.

Мое базовое требование: вставлять основные данные (обновляются) всякий раз, когда я запускаю update-database в консоли диспетчера пакетов.

1 Ответ

0 голосов
/ 24 ноября 2018

Попробуйте добавить следующий атрибут в свойство Key:.

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

Это будет указывать БД автоматически генерировать Key, если ни один не указан

Обновление

По-видимому, необходимо всегда указывать идентификатор даже для автоматически сгенерированных данных, заполненных при переносе, поскольку он используется для сопоставления, если данная записьуже присутствует в базе данных.

Однако может быть решение вручную вставить необходимые записи в базу данных после ее инициализации (например, после вызова context.Database.Migrate()).Конечно, здесь вы должны вручную проверить, не существует ли данная запись.

...