Cannot truncate table because it is being referenced by a FOREIGN KEY constraint hatası ve çözümü

Merhaba arkadaşlar,

Bugün farklı bir senaryoyu sizinle paylaşacağım. Senaryomuzda SQL Server’da 2 adet tablomuz var ve bunlar foreign key ile birbirine bağlanmış durumda.

Bu tablolardan birini “truncate table” komutu ile sıfırlamak istediğimizde aşağıdaki hatayı alacaksınız.

Cannot truncate table because it is being referenced by a FOREIGN KEY constraint

Burada anlatmak istediği Foreign Key bulunan tabloyu, diğer tabloda referansı olduğu (bağlı olduğu) için truncate edemezsiniz diyor.

Çözümü ise çok basit, aşağıdaki kod ile istediğiniz tabloyu truncate edilmiş haline çevirebiliyorsunuz. Öncelikle tablo içindeki dataları temizliyor ardından reseed ederek, ID değerini “0” a çekiyor.

Ben örnek olarak “[Content].[ContentCategory]” yazacağım siz bu tablo adını kendi projenize göre düzenleyebilirsiniz.

Umarım faydalı olmuştur, bir sonraki yazımda görüşmek üzere

Yazılım İş Mülakatı Soruları Serisi – 1 – C# Access Modifiers

Merhaba arkadaşlar,

Uzun zamandır düşündüğüm fakat bir türlü yazmaya fırsat yaratamadığım, biz yazılımcıların işe alım mülakatlarında sorulan bazı sorulara cevaplar vereceğim. Hem ufak bir hatırlatma olsun, hem de doğru bildiğimiz bazı yanlışları düzeltme fırsatımız olsun istedim.

C# Access Modifiers Nedir?
– Türkçe karşılığı Erişim Belirleyiciler olarak geçer.
– Access Modifiers, bir sınıfın içindeki elemanlara ve objelere, projede nerelerden erişileceğini belirler.
– Access Modifiers projedeki tüm varlıklara uygulanır. (class, struct, function, method, property, vs…)

1) public
Her yerden erişilebilmeyi sağlar.

2) protected
Miras alınan sınıflardan erişilmeyi sağlar.

3) internal
Bulunduğu proje içinden her yerden erişilebilmeyi sağlar.

4) protected internal
Hem miras alanlar hem de proje içerisindeki kullanılan yerlerde erişilebilir olur.

5) private
– Sadece tanımlandığı class içerisinden erişilebilir.
– Eğer bir elemana access modifier yazılmaz ise, default olarak private olarak belirlenir.

Alter Table Alter Column failed because column does not exist in table hatası ve çözümü

Merhaba arkadaşlar,

Bildiğiniz üzere Entity Framework Migrations ile çalışırken, veritabanında oluşturulacak tüm tablo ve alanları SQL Server üzerinden oluşturmamıza gerek yoktur. Projemizdeki veritabanı class modellerimizde yapmış olduğumuz düzenlemleri “update-database -verbose” komutu ile veritabanına kolaylıkla aktarabiliyoruz. Bazı senaryolarda veritabanı güncellenirken “Alter Table Alter Column failed because column does not exist” hatası ile karşılaşabilirsiniz.

Bu yazımda “Alter Table Alter Column failed because column does not exist” hatası ve çözümünü sizinle paylaşmak istedim.

Alter Table Alter Column failed because column does not exist in table hatasının nedeni ilgili tabloyu veya bu tabloya ait bir kolonu manuel SQL Server üzerinden değiştirdi iseniz bu sorunla karşılaşabilirsiniz.

Çözümü ise gayet basittir.

Yaptığınız tüm değişikleri görmezden gelip, yeni bir Migration class oluşturması için aşağıdaki kodu Package Manager Console‘a giriyoruz.

Kodun çalışması tamamlandıktan sonra dikkat edeceğiniz üzere solution içerisinde Migrations klasöründe günün tarihi ve saati yazılı bir class eklendiğini göreceksiniz. Bu class’ı açarsanız, UP ve DOWN metodlarının içinin boş olduğunu yani herhangi bir düzenleme olmadan sıfır bir migration class’ı elimizde var olacak.

Hemen akabinde tekrardan Package Manager Console‘a aşağıdaki kodu yazarsanız sorunsuz bir şekilde veritabanındaki düzenlemelerin aktif olduğunu göreceksiniz.

Görsel üzerinden takip etmek isterseniz, aşağıdaki şemayı inceleyebilir, adımları takip edebilirsiniz.

Bu basit ama çözümü baş ağrıtan sorunu da sizlerle paylaşmış oldum, umarım faydalı olmuştur.

Bir sonraki yazımda görüşmek üzere, şimdilik hoşçakalın 🙂

MVC View Cookie Kullanımı

Merhaba arkadaşlar,

Bir önceki yazımda jQuery Cookie Kullanımı ile ilgili bir yazı yazmıştım. Bu yazımda da Cookine MVC View’da nasıl kullanılara bir örnek paylaşıyorum.

Bir sonraki yazımda görüşmek üzere

jQuery Cookie Kullanımı

Merhaba arkadaşlar,

Peşpeşe yıllık izinlerin kullanıldığı şu günlerde, yine bir projede kullanmak üzere olduğum jQuery Cookie özelliğini sizinle paylaşmak istedim. İnternet aleminde bir çok örneklerine ulaşabilirsiniz. Dünyayı yeniden keşfetmiyoruz ama blog’umun amacına uygun elimizin altında temiz örnekleri ile kendime aldığım notları, siz değerli takipçilerim ile de paylaşmak istiyorum.

Bu sefer konumuz jQuery Cookie (jQuery Çerez). Cookie nedir gibisinden uzun uzadıya bir şeyler yazmak yerine hemen örnek bir senaryoya giriş yapalım. Amacım giriş sayfasında yer alan jQuery Popup’ın kullanıcıya bir defa gösterip, belirli bir süre ardından (expire süresi kadar) gösterilmemesi.

Hemen aşağıda göreceğiniz üzere en basitinden bir popup metodumuz var. Örnek olarak 7 günlük bir kontrol koydum.

Umarım faydalı olmuştur, bir sonraki yazımda görüşmek üzere

Dip not
7 gün = 1000 * 60 * 60 * 24 * 7 milisaniye bazında hesaplayabiliriz.

MSSQL Server DBCC CHECKIDENT ile Identity alanının istenilen değere çekmek

Merhaba arkadaşlar,

Bu aralar işlerim nedeni ile pek yazmaya fırsat bulamıyorum. (Aslında birden çok yazı hazırladım fakat hepsi taslak olarak bekliyor. Sanırım biraz mükemmeliyetçiyim 🙂 )

Fazla lafı uzatmadan, senaryomuza ve sonuca geçelim.

Herhangi bir neden ile MS-SQL server üzerinde bir tabloya data ekleme işlemi esnasında hata meydana geldi ve ID(Identity) değerimiz birer birer arttı.

Bu durumda aşağıdaki senaryoyu ve kod parçasını Identity değerini çekmek için aşağıdaki sql query olarak kullanabiliriz.

Örnek tablo adı: Content.CommentStatus
Mevcut Kayıtlar:
ID: 1-Beklemede
ID: 2-Onaylandı

Eklemek istediğimiz Kayıt
ID: 3-İptal (Fakat hata oldu, ID değeri 4-5-6-7 gibi arttıkça arttı 🙂 )

kodu ile identity değeri 2’ye çekilir, bundan sonra oluşturulacak identity değerleri 3’den başlar.

Umarım faydalı olur, bir sonraki yazımda görüşmek üzere.

MVC Redirect Anchor Tag

Merhaba arkadaşlar,

Bir proje kapsamında çalışırken, yeni oluşturulan veya üzerinde değişiklik yapılan bir View sayfasının Controller üzerinden RedirectToAction metodu ile farklı bir sayfaya yönlendirilmesi gerekliydi.

Fakat bu yönlendirilen yeni sayfa Bootstrap TAB içerdiği için belirtilen (tab_content_detail) tab’ın açılması talep ediliyordu.

Sizin de böyle bir ihtiyacınzı olursa aşağıdaki örnekte RedirectToAction metodunu nasıl Anchor Tag ile açılacağını inceleyebilirsiniz.

Umarım işinize yarar, bir sonraki yazımda görüşmek üzere.

Mevcut REDIRECT TO ACTION Kodumuz

Yeni Anchor Tag kullanılan REDIRECT Kodumuz

The process cannot access the file because it is being used by another process hatası ve çözümü

Merhaba arkadaşlar,

Bir proje kapsamında projeye yüklenen resim, belirli ölçülerde bir dizi işlem yapılarak farklı klasörlere kayıt edilmesi gerekiyordu. Örneğin: 1024x768px’lik bir fotoğraf 3 ayrı boyutta (150×150, 60×60, 30×30, vs..) UserFiles/Images/ klasörüne atılacak gibi düşünebilirsiniz.

Bu işlem sonlandığında ise ilk yüklenen orjinal resmi silmem gerekiyordu. (1024x768px’lik olan)

İşte tam bu noktada File.Delete() metodu çalıştırıldığında “The process cannot access the file because it is being used by another process” hatası ile karşılaştım.

Bu hatanın sebebi, işlemler tamamlanmasına rağmen .net dosyamızı işlem durumunda/sırasında tutuyor. Fakat ben çoktan tüm işlemlerimi bitirmiş, gerekli dosyaları gerekli klasörlere kayıt etmiştim bile 🙂

Sorunun çözümü için birçok farklı yol ve yöntem denemedim ama bir türlü sonuca erişemedim.

İşte tam bu noktada devreye GarbageCollector‘u soktum 🙂 Öncelikle kuyrukta bekleyen işlemleri toparla ( GC.Collect() ) ardından bu iş listesine iş parçacıklarını boşalt geçerli işi ( Orjinal dosyayı silme işlemini) askıya al/bitir.

Sonra tekrardan File.Delete metodu ile orjinal resmimi gönül rahatlığı ile silebildim.

Biraz karışık anlatmış olabilirim ama örnek method’u aşağıdan incelerseniz, net olarak anlaşılacaktır.

Umarım aynı sorunu yaşayanlara yardımcı olmuştur. Bir sonraki yazımda görüşmek üzere

Örnek Methodumuz

MVC PartialView to String

Merhaba arkadaşlar,

Bu yazımda MVC projesi içerisinde kullandığımız bir PartialView içerisindeki HTML kodlarını string’e parse ederek, email gönderimi yapacağız.

EmailHelper class’larına internette çok rahatlıkla ulaşabileceğiniz için tekrar tekrar burada anlatmayacağım.

İhtiyacıma göre olanı biraz zorda olsa araştırmalarım neticesinde internette yabancı bir kaynakta buldum. Haliyle kodları düzenleyerek kendi kullanımım için en sade hale getirdim.

Farklı kaynaklarda genellikle Controller‘ı farklı bir class’a parametre olarak gönderiyor fakat uygulamada Ninject IOC kullandığım için baya uğraştırıyordu.

Lafı fazla uzatmadan sizinle kodları paylaşayım.

Öncelikle uygulamalarımda genellikle String işlemleri için mutlaka Core projesinin altında StringHelper kullanırım. Oluşturduğum static string Methoduma da PartialRenderToString adını verdim.

Oluşturduğumuz extension method ile AddUser Action’ında çağırıp NotificationEmail/NewUser PartialView’ımıza Model’imizi göndereceğiz ve daha sonra bu PartialView’da yer alan HTML kodları ile birlikte html adında bir değişkene atayacağız.

Sonrasında ise daha önceden hazırlamış olduğunuz EmailHelper metodu ile email olarak göndereceğiz.

Örnek PartialView’ımızı oluşturduk (PartialView yolu: \Site\Site\Views\Shared\NotificationEmail\NewUser.cshtml )

Action’ımızda .PartialRenderToString() extension metodumuzu çağırıyoruz.

İşlemimiz bu kadar, umarım işinize yarar.

Bir sonraki yazımda görüşmek üzere

MVC TempData, ViewData, ViewBag içinde HTML Kod Göstermek

Merhaba arkadaşlar,

Çok kısa bir kod parçasını paylaşmak istiyorum. MVC üzerinde çalışırken Controller tarafında Action içerisinde gerçekleştirdiğimiz işlemlerin sonucunu obje veya yazı olarak strong>View tarafında göstermek istediğimizde TempData, ViewData veya ViewBag kullanabilirsiniz.

Hatta bazı durumlarda görsellik katmak için bootstrap alert veya benzeri bir html kod bloğunu View tarafına yazdırmamız gerekebilir.

Şimdi gelelim, örnek senaryomuza. Gönderilen bir forma ait durum bilgisini karışıklık olmaması için herhangi bir html kod bloğu eklemeden sadece bold etiketi içerisinde TempData ile kullanıcıya göstereceğim.

Siz ihtiyacınıza göre ViewBag, TempData, ViewData kullanabilirsiniz.

.cs tarafında

View Tarafında

Çıktısı aşağıdaki gibi olacaktır

Gördüğünüz üzere etiketlerini düz yazı gibi algılıyıp, ekrana basmış oldu. Bu sorunu gidermek için aşağıda inceleyeceğiniz üzere View tarafında @Html.Raw ‘ı kullanmamız gerekiyor.

Sonuç