मैं दो इकाइयों के बीच एक संबंध जोड़ने और विदेशी कुंजी के लिए एक सेटटेबल आईडी रखने का एक तरीका ढूंढ रहा हूं। मैंने पिछली पोस्टों के माध्यम से खोज की है, लेकिन निकटतम मुझे मिल सकता है एक सुझाव है। एसोसिएशन को लोड करें - जो मैं उम्मीद कर रहा हूं वह नहीं है। मुझे पता है कि यह एंटीटी फ्रेमवर्क में किया जा सकता है .सॉर्ज़िग्नेकी बाध्यकारी है, लेकिन मुझे फ्लुएंट एनएचबेर्नेट में ऐसा करने का कोई तरीका नहीं दिख रहा है।फ्लुएंट एनएचबर्ननेट - एक संपत्ति के रूप में एक विदेशी कुंजी मैपिंग
दो उदाहरण संस्थाओं लें:
public class Ticket
{
public virtual int Id { get; set; }
public virtual string Title { get; set; }
public virtual string ServiceId { get; set; }
public virtual Service Service { get; set; }
}
public class Service
{
public virtual string Id { get; set; }
}
मैं टिकट का एक नया उदाहरण बनाने के लिए सक्षम होना चाहते हैं और निम्नलिखित साधनों का उपयोग यह करने के लिए एक सेवा आवंटित (मान लेते हैं कि संबद्ध सेवा तालिका में पहले से मौजूद है):
Ticket ticket = new Ticket() {
Title = "Problem with MS Word",
ServiceId = "Microsoft Word 2012"
};
मुझे क्या करना नहीं चाहते हैं निम्नलिखित है:
Ticket ticket = new Ticket() {
Title = "Problem with MS Word",
Service = Session.Load<Service>("Microsoft Word 2012")
};
मैं इस के लिए वैध कारण है, और इस तरह मैं इस इकाई की रूपरेखा में किया जा सकता है, लेकिन मैं वास्तव में कैसे धाराप्रवाह NHibernate में एक ही बात को प्राप्त करने के लिए के रूप में स्टम्प्ड हूँ कहा है। मेरी मैपिंग्स वर्तमान में इस तरह दिखती हैं:
public class TicketMapping : ClassMap<Ticket>
{
public TicketMapping()
{
Id(m => m.Id);
Map(m => m.Title).Column("Title");
Map(m => m.ServiceId).Column("ServiceId");
HasOne(m => m.Service).ForeignKey("ServiceId");
Schema("dbo");
Table("Tickets");
}
}
public class ServiceMapping : ClassMap<Service>
{
public ServiceMapping()
{
Id(m => m.Id);
Schema("dbo");
Table("Services");
}
}
किसी भी मदद की हमेशा सराहना की जाती है!
बस जे के लिए एक त्वरित संपादित करें - कारण मैं अपने तत्व Session.Load नहीं करना चाहता है, क्योंकि मैं अपनी प्रस्तुति परत (MVC 3) NHibernate के बारे में जानते हुए भी कुछ भी नहीं करना चाहते हैं - इसलिए मैं मैं एक भंडार पैटर्न का उपयोग कर रहा हूं और नियंत्रक में एक एकल भंडार इंजेक्शन कर रहा हूं। उदाहरण के लिए, मैं एक TicketRepository जो निम्नलिखित अनुबंध का पालन करता है होगा
public interface IRepository<T>
{
T GetById(object id);
void Create(T entity);
void Update(T entity);
void Delete(T entity);
}
मैं एक ServiceRepository इंजेक्षन करने के लिए भी बस के लिए सेवा के लिए एक संदर्भ पाने के लिए नहीं करना चाहते हैं टिकट।
क्या आप 'सत्र' लोड 'का उपयोग नहीं करना चाहते हैं, इसके वैध कारणों पर विस्तार कर सकते हैं? – Jay
@ जे, टेरिक के कारण से निश्चित नहीं है ... लेकिन यह कभी-कभी सहेजने से पहले आपके पास पहले से मौजूद कुंजी को संदर्भित करने में सक्षम होने के लिए ऑब्जेक्ट को लोड करने के लिए हास्यास्पद ओवरहेड हो सकता है, IMHO। हमारे पिछले प्रोजेक्ट पर सख्त एसएलए था जहां हमें एफके समर्थन से पहले एंटीटी फ्रेमवर्क पर एक ही काम करना था। –
@Jay ने कारणों से मेरी पोस्ट अपडेट की है। इसके अलावा, केविन एक अच्छा मुद्दा बनाते हैं, मैं इस संबद्ध के लिए किसी अन्य इकाई को लोड करने के अतिरिक्त ओवरहेड नहीं चाहता हूं। –