Visual Studio 2012’de Entity Framework CodeGenerationStrategy ve WCF Sorunu

Visual Studio 2012 ile çalışırken EntityFramework ve WCF ‘i bir arada kullanıyorsanız muhtemelen birkaç sorun ile karşılaşacaksınız. Ben bu sorun ile silverlight uygulaması geliştirirken bir şekilde tanışmış oldum. Öncelikle senaryomuzdan bahsetmek istiyorum.

Sorunun Tespiti;

Visual Studio 2012 ile bir silverlight uygulaması geliştirmek için gerekli projeyi oluşturdum. Projeyi .Net Framework 4.0 ve Silverlight 5 versiyonlarını kullanarak geliştirmek üzere ön ayarlamalarını yaptıktan sonra projemiz planlandığı gibi visual studio 2012 ile oluşturuluyor. Elimizde ilişkili tablolar bulunan bir SQL veritabanı mevcut. Ardından ASP.NET projemize ADO.NET Entity Data Model (EF) ekliyoruz. Modelimiz veritabanından ilişkilendirilmiş tablolarımızı okuyarak ilgili kod üretme işlemini gerçekleştiriyor. ASP.NET projemize silverlight uygulamamız ile veri alışverişinde bulunmak üzere bir WCF servisi ekliyoruz. İlişkili herhangi bir tablodan veri okuyan basit bir metot ekliyoruz. Ardından silverlight uygulamamıza WCF servisimizi Service Reference olarak ekliyoruz. Silverlight uygulamamızdan ilgili metodu çağırdığımız da servis cevabı alınamadığına dair bir hata ile karşılaşacağız. (Bu hata ilişkisiz bir tablodan veri okurken değil ilişkisi bulunan bir tablodan veri okurken meydana geliyor.)

Projenin Oluşturulması

Silverlight Projesinin Ayarlanması

ADO.NET Entity Data Model Eklenmesi

WCF Servisinin Eklenmesi

Silverlight Uygulamasına WCF Servis Eklenmesi ve Kodlama

Silverlight Uygulamasının Çalıştırılması

The remote server returned an error: NotFound.

Oluşan hata şekilden de görüldüğü gibidir. “The remote server returned an error: NotFound.

 

Sorunun Çözümü;

Yukarıda anlattığım  proje adımlarını Visual Studio 2010 ile gerçekleştirdiğinizde böyle bir sorun ile karşılaşmıyorsunuz. Projeniz sağlıklı bir şekilde çalışıyor.

  1. İlk düşündüğüm, Visual Studio 2012 ile gelen Entity Framework ‘ün versiyonunun yükselmiş olmasından kaynaklandığını düşündüm. Visual Studio 2012 üzerindeki projemdeki Entity Framework versiyonunu düşürmeye çalıştım. Bu sonucu etkilemedi.
  2. İkinci düşündüğüm, WCF servisi için yeni bir güncelleme  ya da versiyon yayınlanmış olabileceği ve benim bunu yüklemememden kaynaklı olabileceği idi. Araştırmalarım beni “WCF Data Services 5.2 RTM Tools for Visual Studio 2010/2012” ‘ye yönlendirdi. WCF servis ile ilgili bazı hataları gideren bu Tools’u yükledim. Sorunun çözümüne yaklaştığımı ve sonunda olduğunu düşünürken, tekrar aynı hata ile karşılaşmak çok can sıkıcıydı. Bu da sonucu etkilemedi.
  3. Üçüncü düşündüğüm, Entity Framework’ün ürettiği kod ‘dan şüphelenmem sonucunda oldu. Visual Studio 2012 üzerinde eklediğim ADO.NET Entity Data Model nesnesi ile projeye bir sürü yeni dosya eklendiğini fark ettim. Ayrıca üretilen koddaki miras alınan nesne de farklıydı. Neyden farklıydı diye sorduğunuzu tahmin ediyorum, Visual Studio 2010’da eklediğim ADO.NET Entity Data Model nesnesinden farklı birçok dosya ve kod söz konusuydu. Düşündüm ki eğer Visual Studio 2010 ‘daki kod sorunsuz çalışıyor ise, visual studio 2012 ‘de üretilen kod’a karşı WCF servisi gerekli tepkiyi gösteremiyor. Benim yapmam gereken Visual Studio 2012’de Visual Studio 2010’daki gibi ADO.NET Entity Data Model nesnesinin kod üretmesini sağlamak olmalı !! Bu sefer araştırmamı bunun üzerinde gerçekleştirdim. Ulaştığım bir yazıya buradan ulaşabilirsiniz. Ardından çözüme daha da çok yaklaştıran yazıya da buradan ulaşabilirsiniz. Tabii ki yapılacakları kısaca burada açıklayacağım.

Öncelikle sorun;

ADO.NET Entity Data Model nesnesinin kod üretme şeklinde(bu kesinleşti)

  • Visual Studio 2012 ‘de ADO.NET EF Modelinizi çift tıklayarak designer’ı açın.
  • Designer’da boş bir yere tıklama yaptığınızda “Properties” pencerenizde ilgili özellikler gelecektir.

image

  • Properties penceresindeki “Code Generation Strategy” özelliğinin değerini “Default” olarak değiştirin.

image

  • Ardından Solution Explorer’da Model’inize ait “*.tt” uzantılı dosyaları silin.

image

  • Modelinizin bulunduğu projenizi “Rebuild” ile yeniden derleyin.

image

  • Projenizi F5 ile çalıştırdığınızda WCF servisinizin sorun vermeden çalıştığını göreceksiniz.

 

Çözüm basit görünüyor. Sorunun tespitinde baya bir uğraştığımı ve farklı senaryolar düşündüğümden farklı noktalara gittiğimi farketmişsinizdir. Burada kolayca okuduğunuz bu sorun beni 3-4 gündür oyalıyordu. Açıkçası işimi Visual Studio 2010 üzerinden götürdüm fakat sorunu çözmem beni çok sevindirdi. Sizin içinde aynı şekilde hissettireceğiniz düşünüyorum.

 

#amenities

Silverlight 5 ile Gelen Yenilikler

Tarih: 30 Ocak 2012 Pazartesi 21:00
Konuşmacı: Görkem SEZGİN
Link: https://www.livemeeting.com/cc/mvp/join?id=3BHK2Z&role=attend

Kaynak : http://www.buraksenyurt.com/post/NedirTvcom-Ocak-Webinerleri-ve-Code-First-Development.aspx