Geçersiz sütun adı 'Discriminator' (Entity Framework)

14 Aralık 2016 3 dk okuma süresi 80 okunma

Geçersiz sütun adı 'Discriminator' / Invalid column name 'Discriminator'

Entity Framework poco class'ından inherit edilen bir class'ın elemanlarını map etmeye çalışır. Bu fluent api'nin çok başarılı bir özelliği. (bknz: Entity framework fluent api) Düşününce gayet mantıklı bir olay ve ef bu konuda haklı. Bunun çözümü ise oldukça basit. Yapılması gereken inherit edilen class'a DataAnnotations attribute'u olan [NotMapped] eklemek. Aşağıdaki örnek anlamanıza yardımcı olacaktır.

İlk olarak EF code first ile yarattığım menu class'ım aşağıdaki gibi.

using System;
using System.Collections.Generic;
namespace Model.Models
{
    public partial class MENULER
    {
        public MENULER()
        {
            this.MENULER1 = new List<MENULER>();
        }
        public int ID { get; set; }
        public string TANIM { get; set; }
        public string SAYFA { get; set; }
        public string KRITER { get; set; }
        public Nullable<int> GRUP_ID { get; set; }
        public int SIRANO { get; set; }
        public bool BASLIK { get; set; }
        public bool RAPOR { get; set; }
        public bool AKTIF { get; set; }
        public bool SILINDI { get; set; }
        public virtual ICollection<MENULER> MENULER1 { get; set; }
    }
}

Sonrasında menülerden hangisinin seçili olduğunu anlayabilmek için aşağıdaki gibi bir class yaratıyorum ve MENULER partial class'ımdan türüyor.

using Model.Models;
using System.ComponentModel.DataAnnotations.Schema;
namespace Model.DTOs
{
    [NotMapped]
    public class MENU_OBJ : MENULER
    {
        public bool SECIM { get; set; }
    }
}

Yukarıdaki örnekte gördüğünüz gibi NotMapped attribute'ü var ve herhangi bir sorun yok, çünkü bu attribute sayesinde entity framework MENU_OBJ ile MENULER class'ını map yapmıyor ve dolayısıyla veritabanından ilgili kolonun olup olmadığını kontrol etmiyor. Bu attribute kalktığı anda map edip veritabanına bakıyor ve ilgili kolon olmadığı için hata veriyor.

NotMapped attribute'ünü isterseniz property bazında da verebilirsiniz. Örnekle gösterecek olursak.

using Model.Models;
using System.ComponentModel.DataAnnotations.Schema;
namespace Model.DTOs
{
    public class MENU_OBJ : MENULER
    {
        public bool SECIM { get; set; }
        [NotMapped]<span class="redactor-invisible-space"> // burada sadece NO ozelligini map etme ama SECIM ozelligini map et dedik.
        public int NO { get; set; }</span>
    }
}


Yazılarıma abone olmak ister misiniz?
Spam yapılmaz, sadece bildirim amaçlıdır. İstediğiniz zaman abonelikten çıkabilirsiniz.
İlginizi çekebilecek diğer yazılar.
VS2015'in 3. update'ini yaptıktan sonra asp.net core web uygulaması yaratmak istediğimde şu şekilde bir hata ile karşılaştım. "Exception : The system cannot find the file specified. (Exception from HRESULT: 0x80070002)". Çözümü oldukça basit.

Asp.Net Mvc ile recursive nasıl yazılır, @helper veya HtmlHelper kullanarak recursive fonksiyon yazmak, Asp.Net MVC View recursive fonksiyon nasıl yazılır?

Entity Framework 7'nin kesinlikle bilmeniz gereken özellikleri ve yenilikleri