एंटिटी फ्रेमवर्क कोड-फर्स्ट के साथ मुझे डेटाबेस बनाने के लिए सभी गुणों को सार्वजनिक करना होगा, इसका मतलब एंटिटी फ्रेमवर्क कोड-फर्स्ट दृष्टिकोण का उपयोग करना है, मुझे एक समृद्ध मॉडल के साथ anemic domain मिश्रित करने के लिए मजबूर होना पड़ा है? क्योंकि जिन गुणों को सार्वजनिक नहीं होना चाहिए, उन्हें होना चाहिए।एंटिटी फ्रेमवर्क कोड का उपयोग करना-पहले मुझे अपने डोमेन एनीमिक का मॉडल होना आवश्यक है?
उदाहरण के लिए:
एक अमीर मॉडल का उपयोग करना, इकाई की रूपरेखा में इस काम नहीं करेगा:
public class Car
{
private int _actualPosition;
public void Accelerate()
{
this._actualPosition += 10;
}
}
काम करने के लिए हम _actualPosition
सार्वजनिक करने की जरूरत है:
public class Car
{
public int ActualPosition { get; set; }
public void Accelerate()
{
this.ActualPosition += 10;
}
}
अब इकाई आईएमओ बदसूरत है, क्योंकि मेरे पास एक विधि है जो संपत्ति में + 10 जोड़ती है और इसे एक ही समय में सार्वजनिक करती है, मैं नहीं चाहता कि वह पीआर ऑपरेटर सार्वजनिक हो।
एक और उदाहरण:
कल्पना कीजिए मैं एक रिश्ते में कई-से-अनेक लेकिन
साथ सिर्फ एक ही रास्ता की तरह हैं:
public class User
{
public long Id { get; set; }
public string Name { get; set; }
public IList<Role> Roles { get; set; }
}
public class Role
{
public long Id { get; set; }
public string Name { get; set; }
}
मैं एक बहुत-से-अनेक संबंध करना कैसे उस मॉडल के साथ? मेरी जानकारी के लिए वहाँ मैं एक दो-तरफा संबंध करना होगा कोई रास्ता नहीं है:
public class User
{
public long Id { get; set; }
public string Name { get; set; }
public IList<Role> Roles { get; set; }
}
public class Role
{
public long Id { get; set; }
public string Name { get; set; }
public IList<User> Users { get; set; }
}
इस मॉडल के साथ मैं बनाने के लिए सक्षम हो जाएगा कई-से-अनेक संबंध:
modelBuilder.Entity<User>()
.HasMany(x => x.Roles)
.WithMany(y => y.Users);
मैं मैं सही हूँ यदि हां, इकाई फ्रेमवर्क मुझे प्रसन्न नहीं कर रहा है।
"एक और उदाहरण" @Slauma के जवाब के साथ काम:
modelBuilder.Entity<User>()
.HasMany(x => x.Roles)
.WithMany()
.Map(a =>
{
a.MapLeftKey("UserId");
a.MapRightKey("RoleId");
a.ToTable("UserRoles");
});
आप निश्चित रूप से गुण एफई edmx में सार्वजनिक की जरूरत नहीं है, इसलिए मैं था अगर आपने पहले ईएफ कोड के लिए किया तो आश्चर्यचकित रहें। क्या वास्तव में कोई एनोटेशन या कुछ नहीं है जिसका उपयोग आप अपनी इच्छित संपत्तियों को निर्दिष्ट करने के लिए कर सकते हैं? मुझे लगता है कि आपको निश्चित रूप से एक्सेसर्स की आवश्यकता है, हालांकि। एक संरक्षित या आंतरिक एक्सेसर काम करेगा? (मैंने मूल रूप से निजी सोचा लेकिन मुझे संदेह है कि इसे कम से कम संरक्षित करने की आवश्यकता है।) – Rup
@Rup: कोई टिप्पणी नहीं है। गुणों को सार्वजनिक नहीं होना चाहिए, लेकिन उन्हें ईएफ संदर्भ और मैपिंग के लिए दृश्यमान होना चाहिए। –
@ Ladislav क्या आप उस मामले में ईएफ से सहमत हैं? –