Code-First DBContext tabanlı EF5 kurulumunu kullanıyorum.AddOrUpdate beklendiği gibi çalışmaz ve çoğaltmalar üretiyor
DbMigrationsConfiguration.Seed
içinde DB'yi varsayılan dummy verileriyle doldurmaya çalışıyorum. Bu görevi gerçekleştirmek için DbSet.AddOrUpdate
yöntemini kullanıyorum.
en basit kod amacım göstermek için:
Ben güncelleme seçicisi olarakId
/
Slug
özelliğini kullanmak kadar/kullanmak ve ayrıca
Id
alanının göz ardı edilmesi denedim
j = 0;
var cities = new[]
{
"Berlin",
"Vienna",
"London",
"Bristol",
"Rome",
"Stockholm",
"Oslo",
"Helsinki",
"Amsterdam",
"Dublin"
};
var cityObjects = new City[cities.Length];
foreach (string c in cities)
{
int id = r.NextDouble() > 0.5 ? 0 : 1;
var city = new City
{
Id = j,
Name = c,
Slug = c.ToLowerInvariant(),
Region = regions[id],
RegionId = regions[id].Id,
Reviewed = true
};
context.CitySet.AddOrUpdate(cc => cc.Id, city);
cityObjects[j] = city;
j++;
}
. çalıştırıldığında, Id
alanı yoksayılır ve değer SQL Server tarafından otomatik olarak oluşturulur ve DB çiftler ile doldurulur; Slug
seçici çoğaltmaya izin verir ve sonraki çalıştırmalarda istisnalar oluşturur (Sequence contains more than one element
).
AddOrUpdate
yöntemi bu şekilde çalışmak üzere tasarlanmıştır? Ben elimden geleni yapmalı mıyım? Sadece tip City[]
bir dizi oluşturmak ve bir kez context.CitySet.AddOrUpdate(cc => cc.Id, cityArray);
çağrı böylece
Gert, yardım etmeye çalışıyorum için teşekkür ederim! Aslında, Şehir, 0'dan 9'a kadar değişen "id = j" oldu. Siz sadece benzer değişken isimleriyle kandırıldınız. Daha sonra, İsim kullanmanın etkilerinden bahsetmiştim (benim durumumda, Slug, gerçekten benzersiz olduğu gibi) - DB'ye kopyalanmasına izin veriyor. Tüm nesneleri bir dizi olarak geçmek hiçbir ilerleme göstermedi. – berezovskyi
Cevabınızı güncellediğiniz için teşekkürler. Artık bunu doğrulayamıyorum. Eğer topluluğun herhangi biri cevabınız altında ona yardımcı olduğunu belirttiyse, cevabınızı kabul edildi olarak işaretleyeceğim. Üzgünüm çok uzun sürdü. – berezovskyi
Kayıtların benzersiz bir şekilde tanımlanması için iki alanın gerekip gerekmediğine dair tanımlayıcı ifadesinin nasıl görüneceği hakkında bir fikriniz var mı? Ben p => p.ProductName, p.CategoryName düşünüyorum (ama tabii ki çalışmıyor). Eğer gerçek DBSet başvurmak zorunda '' context.Set() .AddOrUpdate (...) kullanırken –
Jarvis