Osman KURT

Kendime Not

Entity Framework AsNoTracking Kullanımı

Merhaba arkadaşlar,

bu yazım da sizlere AsNoTracking() konusundan bahsedeceğim. Basit bir kod ama yerinde kullanıldığında performans bakımından gerçekten de verim sağlayacağımız birşey. Kullanımı basit. Lambda sorgu yazarken tablo adından sonra AsNoTracking yazarak kullanabiliyoruz.

var liste = entity.tbl_User.AsNoTracking().ToList();

Şimdi diyeceksiniz ki yazarsak ya da yazmazsak ne olur arada ki fark nedir?

Olay şu arkadaşlar, AsNoTracking kullanırsak yaptığımız select üzerinde herhangi bir update işlemi uygulayamıyoruz. Yani değişikliği yaptıktan sonra entity.SaveChanges() diyerek update işlemi yapamayacağız. Tabi ki her sorgumuz da update işlemi yapmadığımız içinde bize gerçek anlamda kar sağlıyor.

Görüşmek üzere,

Osman KURT
C# Yazılım Uzmanı

Entity Framework İncelikleri

Merhaba arkadaşlar,

Entity framework kullanan bir çok arkadaş belki karşılaşmıştır. Bazı tablolar var ki ne yaparsanız yapın bir türlü entity model içine dahil edemezsiniz.

Geçen günlerde benim de başıma geldiği için yazma gereği duydum. Arkadaşlar eğer bir tablo entity model içine dahil edilemiyorsa bunun ilk sebebi tablonun bir primary key alana sahip olmamasıdır. Dİyebilirsiniz ki her tablo zaten dahildir. Ben şahidim değil :) olmadığı durumları da gördü bu gözler.

Eee Osman efendi bunun çözümü nedir diye soracaksınız. Basit arkadaşlar PK yoksa bile PK olarak kullanabilecek bir alan için nulleble alanını null geçilemez olarak ayarlamak gerekir. Eğer gerekli ayarlamayı yaparsak Entity bu alanı readonly olarak key atayacak ve tabloyu modelinize dahil edecek. Siz de istediğiniz gibi kullanabilirsiniz.

Kolay gelsin,

Osman KURT
Yazılım Uzmanı C# Uzmanı

MVC C# Factory Kullanımı

Merhaba,

MVC factory nedir?

Bilindiği üzere mvc bir projeye request geldiğinde ilk olarak controller kısmına düşer ve daha sonrasında view işlenir kullanıcıya sonuç döndürülür. Yani kabaca anlatmak gerekirse durum budur. Bizim factory kullanmamızda ki amaç ise request controller kısmına gelmeden karşılamak ve gerekli işlemleri yapmaktır ya da gerekli yönlendirmeyi.

Ben bu gibi durumlar genellikle bir yönlendirme yapmam gerektiğinde kullanıyorum. Sizin kullanım yerinize göre değişim gösterebilir.

Kullanımı ise çok basittir. Oluşturacağınız bir class ve global.asax dosyasında Application_Start kısmın da yapılacak ufak bir düzenleme ile işlem tamamlanacaktır.

Bu aşama da alt kısmıda ki kod işinizi görecektir.

 
public class Factories : DefaultControllerFactory
    {
        public override IController CreateController(RequestContext requestcontext, string controllerName)
        {
            IController controllerObject = null;
            Type controllerType = null;

            if (controllerType == null)
            {
                controllerType = base.GetControllerType(requestcontext, controllerName);
            }

            if (controllerType != null)
            {
                controllerObject = (IController)Activator.CreateInstance(controllerType);
            }

            return controllerObject;
        }
    }
protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            ControllerBuilder.Current.SetControllerFactory(typeof(FirstExample.Helpers.Factories));
        }

Breakpoint koyduğunuz takdirde, ilk isteğin factory kısmına düşeceğini göreceksiniz. Artık kontrol sizde.

Osman KURT

Yazılım Uzmanı & Mobil Yazılım Uzmanı