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.