किसी ऐसे ग्राहक पर विचार करें जहां एक ग्राहक, कंपनी, कर्मचारी इत्यादि, एक ContactInfo संपत्ति है जिसमें बदले में पता (एस), फोन (एस), ईमेल (ओं) आदि का एक सेट होता है। , आदि ...इकाई फ्रेमवर्क केवल संग्रह पढ़ता है
यहाँ है मेरी संक्षिप्त ContactInfo:
public class ContactInfo : Entity<int>
{
public ContactInfo()
{
Addresses = new HashSet<Address>();
}
public virtual ISet<Address> Addresses { get ; private set; }
public Address PrimaryAddress
{
get { return Addresses.FirstOrDefault(a => a.IsPrimary); }
}
public bool AddAddress(Address address)
{
// insure there is only one primary address in collection
if (address.IsPrimary)
{
if (PrimaryAddress != null)
{
PrimaryAddress.IsPrimary = false;
}
}
else
{
// make sure the only address in collection is primary
if (!Addresses.Any())
{
address.IsPrimary = true;
}
}
return Addresses.Add(address);
}
}
कुछ नोट (मैं 100% यकीन है कि अगर इन एफई "सर्वोत्तम प्रथाओं" कर रहे हैं नहीं कर रहा हूँ):
- पते का संग्रह (एसएस) आभासी लोडिंग के लिए आभासी है
- संग्रह पर निजी सेटर पर प्रतिबंध लगाता है संग्रह प्रतिस्थापन
- संग्रह का बीमा करने के संपर्क
- प्रति कोई डुप्लिकेट पतों
AddAddress
पद्धति का उपयोग करके मैं बीमा कर सकते हैं हमेशा और अधिक से अधिक 1 पते जो प्राथमिक है है कि वहाँ देखते हैं कि एकISet
है ... ।
मैं चाहते हैं (यदि संभव हो) ContactInfo.Addresses.Add()
विधि के माध्यम से पतों को जोड़ने को रोकने के लिए और ContactInfo.AddAddress(Address address)
का उपयोग करते हुए मजबूर करने के लिए ...
मैं सेट उजागर सोच रहा हूँ ReadOnlyCollection
के माध्यम से पते का क्या यह एंटिटी फ्रेमवर्क (v5) के साथ काम करेगा?
मैं इसके बारे में कैसे जाऊं?
नहीं यह एक Iset के लिए IEnumerable डाली और सभी जादू जो बाद में छिपा हुआ होना चाहिए ऐसा करना संभव हो सकता है? –
@ माइकल दुर्भाग्यवश, यह मेरे लिए एक विकल्प नहीं है ... मुझे क्वेरी करने में सक्षम होना चाहिए ... – zam6ak
यह पहले कोड में काम नहीं करता है। ईएफ सुरक्षित संग्रह/सेट के लिए कोई भी टेबल नहीं बनाता है। – 101V