1 Şubat 2020 Cumartesi

The INSERT statement conflicted with the FOREIGN KEY constraint hatası

İlişkili veritabanlarına veri eklemeye çalıştığımızda karşımıza çıkan bir hatadır. Bu hatanın 2 farklı kaynağı vardır. İlki, İlişki kurulmuş bir tabloda olmayan bir verinin, ilişki kurulan diğer tabloya eklenmeye çalışılması sırasında The INSERT statement conflicted with the FOREIGN KEY constraint hatası fırlatılır.

Bu hatanın fırlatılmasının diğer nedeni veri girilmesi zorunlu olan tabloya hiç veri girilmemesidir.
Örneğin;
aşağıdaki gibi iki POCO sınıfımız olsun.

    public class Topic : Entity
    {
        public const int MaxTitleLength = 90;
        [Required]
        [StringLength(MaxTitleLength)]
        public string Title { get; set; }
        public virtual ICollection Pegis { get; set; }
 
        public int CategoryId {get;set;}
        public virtual Category Category {get;set;}
    }
    public class Pegi : Entity
    {
        public long TopicId { get; set; }
        public string Title { get; set; }
        public virtual Topic Topic { get; set; }
    }
public class Category : Entity
{
    public string Title {get;set;}
    public virtual ICollection Topics {get;set;}
}

Burada Pegi varlığına bir TopicId belirtilmeden veri girilmeye çalışılırsa The INSERT statement conflicted with the FOREIGN KEY constraint hatası fırlatılır.

Benzer şekilde bir CaetgoryId belirtilmeden Topic girdisi yapılmaya çalışılırsa aynı hata fırlatılacaktır.

Bu durumdan kaçınmak için ya zorunlu olan varlık ile bir ilişkilendirme yapılmalı ya da TopicId ya da CategoryId nulleable olmalıdır

        public long? TopicId { get; set; }
        public int? CategoryId {get;set;}