Bagaimana cara menyemai data master selama metode OnModelCreating DbContext jika kunci utama yang dibuat secara otomatis diaktifkan?

Kerangka Aplikasi: ASPNET Core 2.1

Ini kelasku

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

Saya memiliki kode di bawah ini yang memungkinkan penyemaian data dan pembuatan otomatis kolom 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" }
        );
    }

Saya mendapatkan kesalahan di bawah ini saat menjalankan perintah add-migration InitialCreate

Entitas awal untuk tipe entitas 'Karyawan' tidak dapat ditambahkan karena tidak ada nilai yang diberikan untuk properti 'Kunci' yang diperlukan.

Saya tidak ingin mengirimkan nilai untuk Key. Saya ingin itu dibuat secara otomatis di database SQL Server.

Persyaratan dasar saya adalah: Masukkan data master (diperbarui) setiap kali saya menjalankan update-database di konsol manajer paket.


person kudlatiger    schedule 24.11.2018    source sumber
comment
Sejauh ini, metode HasData tidak memiliki kelebihan yang menerima spesifikasi kunci yang cocok, seperti yang dimiliki AddOrUpdate. Ini bisa berupa permintaan fitur. Sampai saat itu, satu-satunya pilihan Anda adalah menentukan nilai kunci. Namun perlu diperhatikan, bahwa Anda akan selalu memerlukan kunci yang ditentukan jika Anda juga ingin memasukkan data yang merujuk ke Employee.   -  person Gert Arnold    schedule 24.11.2018


Jawaban (1)


Coba tambahkan atribut berikut ke properti Key:.

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

Ini akan memerintahkan DB untuk membuat Key secara otomatis ketika tidak ada yang ditentukan

Memperbarui

Rupanya Anda harus selalu menentukan ID bahkan untuk data yang dibuat secara otomatis diunggulkan dalam migrasi, karena digunakan untuk mencocokkan jika entri yang diberikan sudah ada di database.

Namun, solusinya adalah dengan memasukkan catatan yang diperlukan ke dalam database secara manual setelah diinisialisasi (misalnya setelah Anda memanggil context.Database.Migrate()). Tentu saja di sini Anda harus memeriksa secara manual apakah record yang diberikan belum ada.

person Martin Zikmund    schedule 24.11.2018
comment
tidak bekerja. itu menunjukkan kesalahan yang sama, saya sudah memiliki modelBuilder.Entity‹Employee›().Property(x =› x.Key).HasDefaultValueSql(NEWID()); untuk pembangkitan otomatis. 'add-migration' berfungsi jika saya menghapus kode data benih. jadi apa pilihan alternatif selain data benih? - person kudlatiger; 24.11.2018
comment
Ini menyelesaikan masalah tetapi tidak menyelesaikan kebutuhan. Itu memasukkan kunci yang telah saya tentukan seperti yang Anda sarankan. Saya ingin melihat panduan yang dibuat secara otomatis di database. - person kudlatiger; 24.11.2018
comment
Jika Anda menggabungkan bagian terbaru dari pertanyaan saya dan atribut [DatabaseGenerated(Identity)], itu akan berfungsi - person Martin Zikmund; 24.11.2018