2009-01-12 16 views
5

Linq'den SQL'e gelince biraz yeni biriyim ama umarım yardımcı olabilirsiniz. Ben Uzatma Yöntemleri ile aşağıdaki Linq to SQL deyimi yazdık: CEDB DataContext olduğunuLinq to SQL kullanırken neden "Geçersiz Döküm" alıyorum?

Cedb.ClassEvents.Where(c => c.ClassID == 1).Select(c => c).Single() 

, ClassEvents (sınıflar ve etkinlikler için bir tesiste tutuluyor) bir tablodur ve ClassID'yi benzersiz tamsayı anahtarıdır.

Bu sorgu, LinqPad (Cedb olmadan) uygulamasında çalışır. Döndüğünde, dönüş türünün "ClassEvent" olduğunu söylüyor. Visual Studio'da Intellisense uygulamasında, bu sorgunun dönüş türünün ClassEvent (veri modelimde oluşturuldu) olduğunu söyler. Ancak, ne zaman bir değişken sonuçlar yerleştirmeye çalışmalıdır:

var classEvent = Cedc.ClassEvents.Where(c.ClassID == 1).Select(c => c).Single(); 

sonra bir hata alıyorum: ınvalidcastexception: Belirtilen atama geçerli değil. Var olan yerine "ClassEvent" sınıfını kullanırsam aynı şey olur. Buna yeniyim ama bu bir böcek yerine gerçek bir smaç gibi görünüyor. Hataya neden olduğunu bilmediğim Tek yöntem hakkında bir şey var mı? Herhangi bir yardım takdir edilecektir!

cevap

5

Slace - ve diğer ilgili taraflar ile etkileşimden önce null bir kontrol yapıyor. "Geçersiz Cast Özel Durumu" hatasının nedeni, temel veri modelindeki bir değişiklikti. Küçük bir alan bit olarak değiştirilmişti. Böylece, sistem sorgu sonuçlarını "ClassEvent" veri yapısıyla eşleştirmeye çalıştığında, model (henüz güncellenmemiş) ile veri tablosu arasındaki çatışma ortaya çıktı.

Yine de cevabı takdir ediyorum!

+0

Cevabınız için teşekkürler, maalesef bu bir veritabanına konuşmak için Linq to SQL kullanamadığımız anlamına geliyor Bu biraz farklı bir şemaya sahip olabilir? – jpierson

1

(http://msdn.microsoft.com/en-us/library/bb535118.aspx bakınız) Bir seçme ve Tek, aslında, hatta nerede gerekmez, sen paçayı hem yapmak gerekmez:

var classEvent = Cedc.ClassEvents.Single(c => c.ClassID == 1); 

ben istiyorum Func<T, bool>'un her zaman bir değer döndürecekmiş gibi 100% emin değilseniz, Single'u kullanmamanızı öneririz. Daha iyi SingleOrDefault kullanıyor ve nesne (http://msdn.microsoft.com/en-us/library/bb549274.aspx)

+0

Teşekkür ederiz! Yazmaya başladım ve eğer herhangi biri daha basit bir şekilde biliyorsa ... çünkü "10 Mitleri" makalesini hatırlıyorum. Ancak, her şeyin ne olduğunu ve sadece bir kısayol için gitmediğini anlamak isterim. Neyse ki ikisini de yaptın. Tekrar teşekkürler. –

+0

[10 LINQ Mitleri] 'ye Bağlantı (http://www.albahari.com/nutshell/10linqmyths.aspx) – Justin