2016-04-06 21 views
1

Bir nesneyi bir listeye yerleştirmeye çalışıyorum.Obj'yi C# Linq kullanarak listeye yerleştirin

childModel childElement= new childModel; 

parentModel myList = db.list.Where(e => e.id.equals(someId)).Include("someNestedList").FirstOrDefault(); 

childElement.prop1 = true; 
myList.someNestedList.Insert(index, childElement); 

Yani buradan her şey uygun endeksinde listeye çocuk nesne ekler anlamda çalışıyor fark. Bu listeyi kaydetmeyi denediğimde sorun ortaya çıkıyor.

db.Entry(myList).State = EntityState.Modified; 
db.SaveChanges(); 

Veritabanındaki dizini kaydetmediğini, ancak başka bir girdi eklediğini fark ettim. bir sonraki müsait kimlikle Demek istediğim, değeri girdikten sonra Birincil Anahtarı yeniden düzenlememesi.

Ekleme yöntemini kullanmamak ve sadece her alt öğe için db.Entry() = EntityState.Modified kullanmak daha iyi midir?

Herhangi bir öneri?

+0

EF kimliği (birincil anahtar) neyi güncelleyeceğinize satır bilmek kullanır. Yani, bu olabileceğini düşündüğünüz kadar basit değil. Temel olarak, bu dizindeki öğeyi yeni değerlerle güncellemeniz ve aşağıdakilerle birlikte aşağıdakileri güncellemeniz ve sonun değerleri ile yeni bir tane oluşturmanız gerekir (listenizin kimliğe göre sıralanması ve bir Kimlik). Tasarımınızı tekrar gözden geçirmek isteyebilirsiniz, ancak bunu ilk etapta yapmanız gerekmez. – juharr

+0

Evet, bu her öğeyi tekrar değiştirmeniz gereken ikinci öneri olur. Tasarım dediğinizde, id/birincil anahtarın sıralama değeri olarak kullanılmamasından mı bahsediyorsunuz? –

+0

Neden birincil anahtar kimliğiniz tarafından "ortada" yeni bir öğe eklemeniz gerekiyor? Eğer devam etmeniz gereken bir sipariş varsa, o zaman bunun için ayrı bir sütun kullanılabilir, ancak yine de siparişi değiştirmek için çok fazla güncelleme yapmanız gerekir. – juharr

cevap

0

Kullandığınızda .ToList() yeni bir örnek oluşturuyorsunuz, bu nedenle SaveChanges'i yaptığınızda EF bu yeni örneği tanımıyor, dolayısıyla tablonuza yeni bir öğe ekleyecektir.

Burada iyi bir örnek görebilirsiniz: http://www.entityframeworktutorial.net/update-one-to-many-entities-in-entity-framework.aspx

+0

Kodumu biraz güncelledim. Yani aslında bir nesnenin içindeki yuvalanmış bir liste. Bu konuda yanlış olmadığım sürece yeni bir örnek oluşturduğumu sanmıyorum. Oradan iç içe bir listeye bir değer ekleyeceğim. –