2013-04-17 52 views
10

Bir müşteri masanınEntityFramework

var customers= context.CustomerEntities.Include("Addresses").Select(Mapper.Map).ToList(); 

mapper fonksiyonu verileri alır aşağıdaki kod, bir iş, varlık nesnesi eşler var nesnesi ve şu şekilde görünüyor: Yukarıdaki kod iyi çalışır. Ancak

, bunu deneyin:

var customers= context.CustomerEntities.Select(Mapper.Map).ToList(); 

şu hata mesajını alıyorum: Mapper fonksiyon yürütülür There is already an open DataReader associated with this Command which must be closed first.

Şimdi, bu sorunu çözmek için bağlantı dizgimde multipleactiveresultsets=True'u ayarlamam gerektiğinin farkındayım. Denedim ve problemimi çözdü.

Ancak, SQL profilleyicisini çalıştırdığımda, varlık çerçevesinden tüm müşterileri sorgulamak, onlara gerek duymama rağmen otomatik olarak tüm adresleri de aldılar.

multipleactiveresultsets=True'u ayarlamaya ek olarak bir geçici çözüm var mı? Adreslerin her zaman tembel olmasını istemiyorum.

+0

Muhtemelen kodunuzu örnekleminizden önce kontrol etmek isteyeceksiniz, bahis kodunuzun tetiklenmesinden önce başka bir etkinliğin aktif olduğunu tahmin ediyorum. – Middas

+0

Hayır Başka bir etkin içeriğim yok –

+0

Dan, bir konuda olabilirsiniz. Bunu deneyelim: –

cevap

11

Bunun nedeni, her bir Customer için select deyiminin, veritabanına yeniden girip okuma yapması gerektiğine inanıyorum. Neden önce ToList() yapmayın ve ardından eşleme gibi (Select) bir şey geçerlidir: bu ilk veri getirmek ve ardından eşlemesi yapacağını inanıyorum

var customers= context.CustomerEntities.ToList().Select(Mapper.Map); 

ve bu sorunu olmazdı.

+12

Tüm koleksiyonu, büyük miktarlarda veri ile uğraşırsanız çok kötü bir fikirdir. – Henry

+2

Yukarıda belirtilen sebepten dolayı reddedildi. –

+2

Katkıda bulunmak için pozitif bir şeyiniz yoksa, anlamsız bir düşüş. – JazziJeff

İlgili konular