23

'a giren çok sayıda programcı yayını okudum Bağımlı işlemler için geçerli bir sipariş belirlenemedi. Varlık Çerçevesi'nde kendi kendini referanslama ilişkisi kullanırken, yabancı anahtar kısıtlamaları, model gereksinimleri veya mağaza tarafından üretilen değerler'dan kaynaklanan bağımlılıklar olabilir.Varlık Çerçevesi'nde özdeğerlendirme/alt-çocuk ilişkisi

Ben çalışmak için bir ebeveyn-çocuk ilişkisinin almaya çalışıyorum: Bu kullandığım yapılandırma (Akıcı API)

public class Category { 
    public int CategoryId { get; set; } 
    public string Name { get; set; } 
    public int ParentId { get; set; } 
    public Category Parent { get; set; } 
    public List<Category> Children { get; set; } 
} 

:

Property(c => c.ParentId).IsOptional(); 
HasMany(c => c.Children).WithOptional(c => c.Parent).HasForeignKey(c => c.ParentId); 
//HasOptional(c => c.Parent).WithMany(c => c.Children).HasForeignKey(c => c.ParentId); 

İkisi hasMany() ve HasOptional () yapılandırmaları, "Bu gibi yeni bir kategoriyi kaydetmeyi denediğimde" bağımlı işlemler için geçerli bir sipariş belirlenemiyor ... "istisnasıyla sonuçlanır:

context.Categories.Add(new Category { Name = "test" }); 

EF neden Kategoriyi null parentıd ile eklemediğini anlamıyorum. Veritabanı, ParentId yabancı anahtarının boş olmasına izin verir.

Bunu nasıl yapacağımı söyleyebilir misiniz?

cevap

28

Bir opsiyonel ilişki için yabancı anahtar özelliği olarak kullanmak olarak null kategori sınıfında ParentId tanımlamak gerekir:

public int? ParentId { get; set; } 

Bir int tesiste temsil edemez dolayısıyla değerini null alıp olamaz Bir veritabanı sütunundaki değer olarak NULL.

+0

Teşekkürler! İşe yaradı. Her ikinize de – Julius

+0

+1, günümü yaptınız. Thax çok. –

+0

Bu ebeveyn-çocuk ilişkisini niteliklerle (akıcı) uygulamaya koymanın bir yolu var mı? – Shimmy