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?
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
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? –
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