एंटीटी फ्रेमवर्क कोड-पहला दृष्टिकोण का उपयोग करना।किस तरह से कैस्केडिंग डिलीट्स एक-से-कई रिश्ते में जाते हैं?
मान लीजिए मैं दो इकाई श्रेणियां होती हैं:
[Table("Objects")]
public class DbObject : IValidatableObject
{
public long Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual ICollection<DbObjectProperty> Properties { get; set; }
}
[Table("ObjectProperties")]
public class DbObjectProperty
{
public long Id { get; set; }
public string Name { get; set; }
public string Value { get; set; }
[Display(Name = "Object"), UIHint("Object")]
public long ObjectId { get; set; }
public virtual DbObject Object { get; set; }
}
अंक यहाँ गौर करने योग्य
DbObject
केवल एक नेविगेशन संपत्ति है, लेकिन एक विदेशी कुंजीDbObjectProperty
के साथ कोई स्तंभ एक नेविगेशन है संपत्ति और एक विदेशी कुंजी- I के साथ एक संबंधित कॉलम I टी स्पष्ट होना चाहिए कि यदि मैं किसी ऑब्जेक्ट को हटा देता हूं, तो मैं इसके गुणों को इसके साथ जाना चाहता हूं, लेकिन अगर मैं एक ही संपत्ति हटा देता हूं, तो मैं नहीं चाहता कि पूरी वस्तु गायब हो जाए।
बेशकmodelBuilder.Entity<DbObjectProperty>() .HasRequired(op => op.Object) .WithMany(obj => obj.Properties) .HasForeignKey(op => op.ObjectId) .WillCascadeOnDelete(false);
, इसका मतलब है कोई सोपानी हटाए गए हो जाएगा:
डीबी संदर्भ के लिए OnModelCreating
विधि में, अब तक मैं संबंधों को परिभाषित करने के लिए निम्न था। मेरा सवाल है: अगर मैं इसे true
में बदलता हूं, तो क्या मैं वही करता हूं जो मैं चाहता हूं? याद रखें कि क्या मैं किसी ऑब्जेक्ट को हटाता हूं, मैं चाहता हूं कि इसकी संपत्तियां इसके साथ जाएं, लेकिन अगर मैं एक ही संपत्ति हटा देता हूं, तो मैं नहीं चाहता कि पूरी वस्तु गायब हो जाए।
DropForeignKey("ObjectProperties", "ObjectId", "Objects");
DropIndex("ObjectProperties", new[] { "ObjectId" });
AddForeignKey("ObjectProperties", "ObjectId", "Objects", "Id", cascadeDelete: true);
CreateIndex("ObjectProperties", "ObjectId");
मुझे चिंता है कि इस सूचित करते हैं कि एक संपत्ति को हटाने उसके संबंधित वस्तु को नष्ट करेगा लगता हूँ:
इस परिवर्तन (false
से true
करने के लिए) के लिए स्वत: जनरेट प्रवास कोड यह है। यह होगा?
[धन्यवाद!] (Http://meta.stackexchange.com/questions/700/) – Timwi
अंगूठे का नियम, कैस्केड डिलीट के साथ है, यदि किसी रिकॉर्ड को हटाने से किसी अन्य रिकॉर्ड से विदेशी कुंजी टूट जाती है, तो निर्भर रिकॉर्ड हटा दिया जाता है भी। – orad
तो 'मॉडलबिल्डर। एंटीटी() .हैस्नी (पी => पी। चिल्ड्रेन) .थोन (सी => सी। माता-पिता) 'मॉडलबिल्डर के समान है। एंटीटी () .सॉस (सी => सी। माता-पिता) .थमनी (पी => पी। चिल्ड्रेन) '(वे एक ही रिश्ते को निर्दिष्ट करते हैं)? –