मैं जानता हूँ कि इस विषय थोड़ी देर के लिए चल रहा है और मैं एक ही मुद्दा किसी तरह का में चला गया। अब तक मुझे मेरे लिए कोई समाधान नहीं मिला जो पूरी चीज को एक ही स्थान पर रखता है ताकि कोड अभी भी पठनीय हो।
किसी उपयोगकर्ता के निर्माण पर मैं ऑब्जेक्ट द्वारा private setters
के माध्यम से कुछ फ़ील्ड सेट करना चाहता हूं, उदा। एक GUID और निर्माण तिथि और कन्स्ट्रक्टर 'प्रदूषण' नहीं।
मेरे उपयोगकर्ता वर्ग:
public class User
{
public static User Create(Action<User> init)
{
var user = new User();
user.Guid = Guid.NewGuid();
user.Since = DateTime.Now;
init(user);
return user;
}
public int UserID { get; set; }
public virtual ICollection<Role> Roles { get; set; }
public virtual ICollection<Widget> Widgets { get; set; }
[StringLength(50), Required]
public string Name { get; set; }
[EmailAddress, Required]
public string Email { get; set; }
[StringLength(255), Required]
public string Password { get; set; }
[StringLength(16), Required]
public string Salt { get; set; }
public DateTime Since { get; private set; }
public Guid Guid { get; private set; }
}
कॉलिंग कोड:
context.Users.Add(User.Create(c=>
{
c.Name = "Name";
c.Email = "[email protected]";
c.Salt = salt;
c.Password = "mypass";
c.Roles = new List<Role> { adminRole, userRole };
}));
कोई भी आश्चर्यचकित होने पर। मैं 'रिपोजिटरी पैटर्न' (http://stackoverflow.com/questions/3175/repository-pattern-tutorial-in-c-sharp) का उपयोग करके समाप्त होता हूं, INSERT के दौरान डिफ़ॉल्ट मान सेट करता हूं। यह एक अच्छा अलगाव है, क्योंकि मैं भविष्य में ईएफ से दूर जाने की सोच रहा हूं। "भविष्य में ईएफ से दूर जाने" के लिए – Andy
+1। बहुत सारे समय बर्बाद हो गए थे, मैं अपने वर्तमान ऐप के लिए सिर्फ एसक्यूएल कोड कर सकता था! लेकिन आप क्या उपयोग करने जा रहे हैं? NHibernate, यह बेहतर है? – Mzn