2017-10-02 24 views
5

मुझे वैश्विक स्तर पर EF Core 2 में कैस्केड हटाने को अक्षम करने के तरीकों के बारे में जानना आवश्यक है। किसी भी मदद की सराहना की है।विश्व स्तर पर ईएफ कोर 2 पर कैस्केड डिलीट अक्षम करें

एफई 6.x हम झरना दोनों OneToMany और ManyToMany realtions पर हटाना निष्क्रिय करने के लिए कोड का पालन करते थे:

builder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); 
builder.Conventions.Remove<ManyToManyCascadeDeleteConvention>(); 

उत्तर

9

दुर्भाग्य एफई कोर वर्तमान में (इस बार v2.0 पर नवीनतम) एक अच्छा तरीका का खुलासा नहीं करता विश्व स्तर पर सम्मेलनों को नियंत्रित करने के लिए।

डिफ़ॉल्ट ईएफ कोर 2.0 सम्मेलन वैकल्पिक संबंधों के लिए DeleteBehavior.Restrict और DeleteBehavior.ClientSetNull का उपयोग करना है। मैं वर्कअराउंड के रूप में सुझाव दे सकता हूं OnModelCreating ओवरराइड के अंत में एक सामान्य मेटाडेटा मॉडल पाश है। इस मामले में, सभी पहले से खोजे गए रिश्तों को ढूंढकर और उन्हें तदनुसार संशोधित करना:

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    // ... 

    var cascadeFKs = modelBuilder.Model.GetEntityTypes() 
     .SelectMany(t => t.GetForeignKeys()) 
     .Where(fk => !fk.IsOwnership && fk.DeleteBehavior == DeleteBehavior.Cascade); 

    foreach (var fk in cascadeFKs) 
     fk.DeleteBehavior = DeleteBehavior.Restrict; 

    base.OnModelCreating(modelBuilder); 
} 
+0

उत्तर के लिए धन्यवाद। क्या 'कैस्केडएफके' में केवल 'एक से कई' संबंध हैं या इसमें 'कई से कई' संबंध भी शामिल हैं? –

+1

वर्तमान में ईएफसी में कोई विशेष 'कई से अधिक' संबंध नहीं हैं (वे 2 'एक से कई' के साथ अनुकरण किए जाते हैं)। तो अपने प्रश्न का उत्तर देने के लिए, 'कैस्केडएफक्स' में सभी रिश्तों - 'एक से कई' और 'एक-से-एक' शामिल हैं। –

संबंधित मुद्दे