Cara melakukan seed data dengan AddOrUpdate dengan kunci kompleks di EF 4.3

101

Saya mencoba memasukkan database pengembangan dengan beberapa data uji.

Saya telah menggunakannya context.People.AddOrUpdate(p => p.Id, people));dengan banyak keberhasilan.

Saya memiliki tabel lain yang perlu saya benih, di mana saya tidak akan tahu kunci utamanya.

Misalnya, saya ingin AddOrUpdate berdasarkan pencocokan nama Depan dan Belakang.

Saya tidak yakin bagaimana menulis Ekspresi dengan benar.

context.People.AddOrUpdate(p => p.FirstName && p.LastName, people);

jelas tidak benar, tetapi saya harap ini menyampaikan solusi yang saya cari.

Keith Sirmons
sumber

Jawaban:

200

Coba ini:

context.People.AddOrUpdate(p => new { p.FirstName, p.LastName }, people);
Ladislav Mrnka
sumber
12
@ LadislavMrnka bagaimana jika pengidentifikasi harus tipe yang kompleks yaitu context.People.AddOrUpdate(p => new { p.Name.FirstName, p.Name.LastName }, people)?
gabe
3
@ LadislavMrnka, juga, bagaimana jika properti tersebut adalah tipe nullable? yaitu context.People.AddOrUpdate(p => new { p.Birthdate }, people)?
stack247
2
Sesuatu yang perlu diperhatikan di sini adalah bahwa koleksi 'orang' harus berupa ARRAY dan bukan daftar. Jika Anda memiliki daftar entitas, Anda cukup memanggil .ToArray () di daftar. Saya kesulitan dengan yang itu :) - Jawaban bagus
Dean Martin
1
tidak bisa membuat ini bekerja. mungkin karena (selain 3 properti yang ditentukan dalam kunci komposit) saya memiliki bidang ID lain dengan nomor yang dibuat secara otomatis?
Sonic Soul
@LadislavMrnka perlu menyimpan folder Migration (Configuration.cs dan ...) setelah melakukan migrasi dan memperbarui bidang database ???
AminM
1

Jika Anda mendapatkannya Only primitive types or enumeration types are supported in this context.karena menggunakan properti navigasi - pertimbangkan untuk menambahkan properti kunci asing langsung ke entitas (mungkin hanya dengan pengambil) dan gunakan seperti yang diusulkan Ladislav Mrnka .

lukyer
sumber
Bagaimana cara menambahkan properti navigasi dari kunci asing tabel lain dalam code firstpendekatan? Saya memiliki struktur seperti context.People.AddOrUpdate(p => new { p.Name.FirstName, p.Name.LastName }, people)? Ini mungkin
yogen darji
Jika saya menyetel kesalahan properti pengambil adalahThe specified type member 'NameId' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
yogen darji