2012-12-09 3 views
6

ICollection<Orders> numaralı telefondan 50000 adede kadar bir sipariş ile bir Müşteri nesnesi gibi bir şeyim var. Custome öğesinin yerel önbellekte olduğunu, siparişlerin olmadığını varsayın. Müşterinin tüm siparişlerini önbelleğe yüklemeden ve bunları setDeleted() ile işaretlemeden, Cutomer'ı ve ilgili tüm siparişlerini nasıl silebilirim? Burada en iyi uygulama hangisidir. public SaveResult SaveChanges(JObject saveBundle) yöntemini genişletmenin en iyi yol olduğunu varsayalım. Müşteri tarafında bir bayrak delete_all_navigation_too() gibi başka herhangi bir olasılık var mı?Varlıkları Silme ve Gezinme Özellikleri

Teşekkür

cevap

5

Gelebildiğim en basit yaklaşım, bir müşteri silindiğinde tüm siparişlerinin de silinmesi için veritabanında bir kaskat silme kısıtlaması oluşturmaktır. Ardından müşteriyi istemciden silin ve 'SaveChanges' (Arayın Kaydet) 'i arayın. Buna ek olarak, Breeze henüz istemci tarafı 'basamaklı' silmeleri desteklemediğinden (bunu düşünüyoruz), zaten yüklenmiş olan tüm istemci taraf siparişleri üzerinde yinelemeniz ve 'bunları ayırmanız gerekir.

+0

Her iki teklif için de teşekkür ederiz. İki cevabı doğru olarak kabul edemediğimden, bunu rastgele seçtim. –

+0

Oh Sascha! Jay'i benden nasıl seçebilirsin? :-) – Ward

+0

Jay, Jay rasgele bir şekilde ^^ kazanana kadar bir jeton atıyordum. Üzgünüm Ward, Jay'e kredi vermeliydim. İtibarınız gök gürültülüydi, bu kadar yüksek bir rozet sayısı bir general kıskanıyordu. Bir dahaki sefere kazanırsın, söz veriyorum :) –

6

Sana yoktur ve kaskad veritabanı üzerinde silme istemiyoruz varsayalım gerekir. Şahsen, genel olarak silmelerden "korkuyorum" ve onları engellemeye çalışıyorum. Yumuşak bir silme tercih ediyorum (bir kaydı devre dışı olarak işaretleme). Ancak herkesin kabul etmediği ya da uyuşmazsa,

Bunu yapmak için denetleyicinize bir Web API'si yöntemi ("DeleteCustomerAndOrders") eklemeyi düşünürdüm. Müşterinizden herhangi bir API yöntemini yalnızca bir Breeze yöntemiyle değil, çağırabilirsiniz.

Bunu tavsiye ederken, bu tür bir şeyin uygulamanızda göreli bir nadirlik olduğunu varsayacağım. Genel amaçlı bir silmeye, bir ana nesne kimliği dizisi almasına neden olan bir deliciye, bazı çocuk nesnelerini silen ve diğerlerini değil, ... vb. Bir silme almanıza gerek yoktur.

Bu yolu takip edin. Sorunu istemciden sunucuya taşıyacak. Bu iyi: siparişleri müşteriye yüklemeniz gerekmedi. Artık sunucudan kurtulmak zorundasın. Varlık Çerçevesi kullanıyorsanız, siparişleri yüklemeden silmenin aynı zorluğuyla karşı karşıyasınız. Alex James'in çözümüne bir göz atın: Bulk-deleting in LINQ to Entities.