EF 4.3'te karmaşık bir anahtarla AddOrUpdate ile veri tohumlama


101

Bazı test verileriyle bir geliştirme veritabanı oluşturmaya çalışıyorum.

Ben context.People.AddOrUpdate(p => p.Id, people));çok başarılı bir şekilde kullandım.

Birincil anahtarı bilmediğim, tohumlamam gereken başka bir masam var.

Örneğin, Ad ve Soyad eşleşmesine göre AddOrUpdate yapmak istiyorum.

İfadeyi nasıl doğru yazacağımdan emin değilim.

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

açıkça yanlış, ancak umarım aradığım çözümü iletir.

Yanıtlar:


200

Bunu dene:

context.People.AddOrUpdate(p => new { p.FirstName, p.LastName }, people);

12
@LadislavMrnka ya tanımlayıcının karmaşık bir tür olması gerekiyorsa context.People.AddOrUpdate(p => new { p.Name.FirstName, p.Name.LastName }, people)?
— gabe

3
@LadislavMrnka, ayrıca, özellik null yapılabilir bir türse? yani context.People.AddOrUpdate(p => new { p.Birthdate }, people)?
— stack247

2
Burada dikkat edilmesi gereken bir nokta, 'insanlar' koleksiyonunun bir liste değil bir DİZİ olması gerektiğidir. Bir varlık listeniz varsa, listeden .ToArray () 'ı çağırabilirsiniz. Bununla uğraştım :) - İyi cevap
— Dean Martin

1
bu işe yaramıyor. muhtemelen (bileşik anahtarda belirtilen 3 özelliğe ek olarak) otomatik olarak oluşturulan numaralara sahip başka bir kimlik alanına sahip olduğum için?
— Sonic Soul

@LadislavMrnka, taşıma yaptıktan ve veritabanı alanlarını güncelledikten sonra Migration klasörünü (Configuration.cs ve ...) saklamalıdır ???
— AminM

1

Eğer amacımız Only primitive types or enumeration types are supported in this context.çünkü navigasyon özelliğini kullanarak - (belki sadece gaz giderici) varlığa doğrudan yabancı anahtar özellik eklemeyi düşünün ve olarak kullanmak Ladislav Mrnka önerdi.


code firstYaklaşımda diğer tablo yabancı anahtarının gezinme özelliği nasıl eklenir ? Yapım var context.People.AddOrUpdate(p => new { p.Name.FirstName, p.Name.LastName }, people)mı? Bu mümkün
— yogen darji

The specified type member 'NameId' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
— Alıcı
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.