मैं इस मॉडल हैइकाई की रूपरेखा संहिता के प्रथम 5 कास्केड कई तालिकाओं के लिए कई पर हटाएँ त्रुटि
public class State
{
public State()
{
this.Promotions = new List<Promotion>();
this.Branches = new List<Branch>();
this.Stores = new List<Store>();
}
public int Id { get; set; }
public string Description { get; set; }
public virtual ICollection<Promotion> Promotions { get; set; }
public virtual ICollection<Store> Stores { get; set; }
public virtual ICollection<Branch> Branches { get; set; }
}
public class Store
{
public Store()
{
this.Promotions = new List<Promotion>();
this.Branches = new List<Branch>();
}
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Promotion> Promotions { get; set; }
public virtual ICollection<Branch> Branches { get; set; }
public int StateId { get; set; } // Foreign key
public virtual State State { get; set; } // Navigation Property
}
public class Branch
{
public Branch()
{
this.Promotions = new List<Promotion>();
}
public int Id { get; set; }
public string Name { get; set; }
public int StoreId { get; set; } // Foreign key
public int StateId { get; set; } // Foreign key
public virtual Store Store { get; set; } // Navigation Property
public virtual State State { get; set; } // Navigation Property
public virtual ICollection<Promotion> Promotions { get; set; }
}
public class Promotion
{
public Promotion()
{
this.Stores = new List<Store>();
this.Branches = new List<Branch>();
this.Productos = new List<Producto>();
}
public int Id { get; set; }
public string Name { get; set; }
public int StateId { get; set; }
public virtual ICollection<Store> Stores { get; set; }
public virtual ICollection<Branch> Branches { get; set; }
public virtual ICollection<Product> Products { get; set; }
public virtual State State { get; set; }
}
और ये मेरे संदर्भ में:
// State
modelBuilder.Entity<State>()
.HasMany(p => p.Promotions)
.WithRequired(e => e.State)
.WillCascadeOnDelete(false);
modelBuilder.Entity<State>()
.HasMany(s => s.Branches)
.WithRequired(e => e.State)
.WillCascadeOnDelete(false);
modelBuilder.Entity<State>()
.HasMany(e => e.Stores)
.WithRequired(e => e.State)
.WillCascadeOnDelete(true);
// Store
modelBuilder.Entity<Store>()
.HasMany(b => b.Branches)
.WithRequired(s => s.Store)
.WillCascadeOnDelete(true);
// Many to many
modelBuilder.Entity<Store>().
HasMany(p => p.Promotions).
WithMany(s => s.Stores).
Map(
m =>
{
m.MapLeftKey("StoreId");
m.MapRightKey("PromotionId");
m.ToTable("Store_Promotion");
});
modelBuilder.Entity<Promotion>().
HasMany(e => e.Products).
WithMany(p => p.Promotiones).
Map(
m =>
{
m.MapLeftKey("PromotionId");
m.MapRightKey("ProductoId");
m.ToTable("Promotion_Producto");
});
modelBuilder.Entity<Branch>().
HasMany(p => p.Promotiones).
WithMany(b => b.Branches).
Map(
m =>
{
m.MapLeftKey("BranchId");
m.MapRightKey("PromotionId");
m.ToTable("Branch_Promotion");
});
अब अगर मैं एक से अधिक WillCascadeOnDelete पर बारी राज्य (पहले तीन धाराप्रवाह मानचित्रण में) की मैं त्रुटि
टेस्ट विधि Proj.Data.Tests.UnitTest1.TestPromotion अपवाद दिए मिलती है:
System.Data.SqlClient.SqlException: तालिका 'शाखा' पर विदेशी कुंजी बाधा 'FK_dbo.Branch_dbo.Store_StoreId' पेश करना चक्र या एकाधिक कैस्केड पथ का कारण बन सकता है। किसी भी कार्रवाई को हटाएं या अद्यतन पर कोई क्रिया निर्दिष्ट करें, या अन्य विदेशी कुंजी बाधाओं को संशोधित करें। बाधा उत्पन्न नहीं कर सका। पिछली त्रुटियां देखें।
मैं जानता हूँ कि, और मैं जूली Lerman की किताब से पढ़ा है:
कुछ डेटाबेस (SQL सर्वर सहित) कई रिश्तों कि झरना एक ही मेज
की ओर इशारा करते हटाना निर्दिष्ट का समर्थन नहीं करते
ऐसा इसलिए होता है क्योंकि कई रिश्तों की मेज से कई संबंधित तालिकाओं से कैस्केड हटाना पड़ता है।
तो, मेरा सवाल यह है कि: यहां एकमात्र विकल्प है कि मूल तालिकाओं पर कैस्केड डिलीट को बंद करना और रिलेशनशिप टेबल पर मैन्युअल रूप से हटाना है? इसके लिए एंटिटी फ्रेमवर्क 5 से कोई कामकाज नहीं है?