इकाई फ्रेमवर्क कोड का उपयोग करते समय पहले 4.3.1 1-से-1 की बहुतायत के साथ संबंध बनाना संभव है। यही है, रिश्ते के प्रत्येक छोर पर एक इकाई।इकाई फ्रेमवर्क कोड पहला वन-टू-वन आवश्यक-आवश्यक रिश्ते
यह^आवश्यक आवश्यक या आवश्यक-वैकल्पिक होने के लिए 1 से 1 रिश्तों कॉन्फ़िगर करने के लिए संभव है। हालांकि, जब मैं दोनों के बीच स्विच करता हूं तो मुझे कोई अंतर नहीं दिखता है:
- डेटाबेस स्कीमा जेनरेट किया गया। मैं SQL सर्वर 2008 को लक्षित कर रहा हूं।
- ईएफ का रनटाइम व्यवहार।
इस तरह के रूप में, मैं के रूप में आवश्यक आवश्यक कॉन्फ़िगर किया गया जा रहा है संबंध के बावजूद एक इसी RequiredDependentAs रिकॉर्ड के बिना एक RequiredPrincipalAs रिकॉर्ड बनाने के लिए, कर रहा हूँ।
इस इकाई प्रकार से एक आवश्यक संबंध को कॉन्फ़िगर करता है: यह HasRequired (...) के लिए दस्तावेज़ खंडन करने के लिए लगता है। इकाई प्रकार के उदाहरण तब तक डेटाबेस में सहेजे नहीं जा पाएंगे जब तक कि यह संबंध निर्दिष्ट न हो। डेटाबेस में विदेशी कुंजी गैर-शून्य होगी।
आवश्यक आवश्यक संबंध संस्थाओं:
public class RequiredPrincipalA
{
public int Id { get; set; }
public virtual RequiredDependentA DependentA { get; set; }
}
public class RequiredDependentA
{
public int Id { get; set; }
public virtual RequiredPrincipalA PrincipalA { get; set; }
}
आवश्यक-वैकल्पिक संबंध संस्थाओं:
public class RequiredPrincipalB
{
public int Id { get; set; }
public virtual OptionalDependentB DependentB { get; set; }
}
public class OptionalDependentB
{
public int Id { get; set; }
public virtual RequiredPrincipalB PrincipalB { get; set; }
}
DbContext और मॉडल conf iguration:
public class AppContext : DbContext
{
public DbSet<RequiredPrincipalA> PrincipalAs { get; set; }
public DbSet<RequiredDependentA> DependentAs { get; set; }
public DbSet<RequiredPrincipalB> PrincipalBs { get; set; }
public DbSet<OptionalDependentB> DependentBs { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<RequiredPrincipalA>()
.HasRequired(o => o.DependentA)
.WithRequiredPrincipal(o => o.PrincipalA);
modelBuilder.Entity<RequiredPrincipalB>()
.HasOptional(o => o.DependentB)
.WithRequired(o => o.PrincipalB);
}
}
परीक्षण कोड:
Database.SetInitializer(new DropCreateDatabaseAlways<AppContext>());
using (var ctx = new AppContext())
{
ctx.Database.Initialize(force: false);
ctx.PrincipalAs.Add(new RequiredPrincipalA());
ctx.PrincipalBs.Add(new RequiredPrincipalB());
ctx.SaveChanges();
}
मुझे पता है मैं की नेविगेशन गुण के लिए एक [आवश्यक] डेटा विशेषता जोड़ सकता हूँ RequiredPrincipalA.DependentA और RequiredDependentA.PrincipalA । यह उपरोक्त परिदृश्य को रोकने के लिए ईएफ सत्यापन का कारण बन जाएगा। हालांकि, मैं ऐसा नहीं करना चाहता क्योंकि यह मौजूदा इकाई को अद्यतन करते समय नेविगेशन प्रॉपर्टी को भी पॉप्युलेट किया जाता है। इसका मतलब है कि आवेदन को प्रत्येक अद्यतन के लिए रिश्ते के दूसरे छोर पर इकाई को पूर्व-प्राप्त करना होगा।
क्यों बस जब के बीच एक रिश्ता बदल रहा है के लिए आवश्यक आवश्यक और आवश्यक-वैकल्पिक मैं नहीं एफई के व्यवहार में कोई अंतर दिखाई देता है?
^ध्यान दें कि वैकल्पिक-वैकल्पिक भी समर्थित है लेकिन यह मेरे प्रश्न का हिस्सा नहीं है। एक वैकल्पिक-वैकल्पिक संबंध कॉन्फ़िगर किए जाने पर उत्पन्न डेटाबेस स्कीमा और रनटाइम व्यवहार में स्पष्ट अंतर हैं।
अपने जवाब के लिए धन्यवाद। यह निश्चित रूप से मेरे प्रश्न के डेटाबेस स्कीमा पहलू को स्पष्ट करता है। हालांकि, मैं समझने में बहुत उत्सुक हूं कि ईएफ में कोई स्पष्ट व्यवहार परिवर्तन क्यों नहीं है। –
क्या यह आवश्यक हो सकता है-आवश्यक है क्योंकि इसे ईएफ द्वारा लागू रनटाइम किया जा सकता है, भले ही यह एसक्यूएल में इस बाधा को लागू करना संभव नहीं है? –
ल्यूक, तथ्य यह है कि आर/आर और आर/ओ को कॉन्फ़िगर करते समय स्कीमा में कोई अंतर नहीं है अब लाडस्लावा के जवाब के लिए धन्यवाद। बिंदु अब यह है कि प्रलेखन राज्यों के बावजूद आर/आर रनटाइम पर ईएफ द्वारा लागू नहीं होता प्रतीत होता है। –