Yapmak istediğim basittir. db'de bir parça listesi var ve bunları bir güncelleme listesine göre silmek/eklemek/güncellemek istiyorum.Entity Framework 5: İçeriği girdide değiştirmek için uygun yöntem
Ana sorun, bir girdiyi değiştirmek istediğimde, daha eski (güncellenmesi gereken) girdinin zaten eklenmiş olması (önceki okunmuş bir aramaya göre) ve bir istisna atılması nedeniyle içeriğe ekleyememektir.
3 düşünce ile geldim.
- Elle Ayır eski giriş ve takmak yenisi (müstakil nedeniyle tarafın durumunu değiştirerek hala atar rağmen istisna)
- Manuel yenileri ile eski giriş değerlerini değiştirmek
- okuma çağrı olmayan olun izlenebilir (AsNoTracking()), bu iyi çalışıyor gibi görünüyor ama tembel yük üzerinde etkisi hakkında endişe duyuyorum.
"context.entry.replace (oldEntry, newentry)" veya benzeri herhangi bir işlevsellik bunu yapmak için başka uygun bir yolu var mı?
IEnumerable<SoldPart> old = db.SoldParts.Where(sp=>sp.sessionId == sessionId);
var toDelete = old.Where(po=> !parts.Any(pu=>pu.id == po.id));
var toCreate = parts.Where(po => !old.Any(pu => pu.id == po.id));
var toUpdate = parts.Where(po => old.Any(pu => pu.id == po.id));
foreach (SoldPart item in toDelete)
{
db.SoldParts.Attach(item);
db.SoldParts.Remove(item);
}
foreach (SoldPart item in toCreate)
{
db.SoldParts.Add(item);
}
foreach (SoldPart item in toUpdate)
{
db.SoldParts.Attach(item);
db.Entry(item).State = EntityState.Modified;
}
db.SaveChanges();
İçeriğiniz zaten silmek/eklemek/güncellemek istediğiniz varlıkları izlemekte neden sadece doğrudan işlem gerçekleştirmiyor? –