मेरे पास निम्न वर्ग द्वारा प्रतिनिधित्व किया गया एक फ़ोल्डर पदानुक्रम है:एक आत्म-संदर्भ फ़ोल्डर पदानुक्रम को मैप करने के लिए मैं फ़्लुएंट एनएचबेर्नेट का उपयोग कैसे करूं?
public class Folder
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Folder ParentFolder { get; set; }
public virtual ICollection<Folder> SubFolders { get; set; }
}
दूसरे शब्दों में, प्रत्येक Folder
ParentFolder
से संबंधित हो सकता है, साथ ही इसमें SubFolders
भी है। मैं Fluent NHibernate के Automapper
का उपयोग कर रहा हूं और स्वचालित रूप से SchemaExport
का उपयोग कर डेटाबेस स्कीमा उत्पन्न कर रहा हूं। जब मैं कुछ टेस्ट फ़ोल्डरों को सहेजने का प्रयास करता हूं तो मुझे निम्न तालिका मिलती है:
Id | Name | ParentFolder_id | Folder_id
----------------------------------------------------------------
1 | Root Folder (has children) | NULL | NULL
2 | Root Folder (no children) | NULL | NULL
3 | Sub Folder | 1 | NULL
4 | Sub Sub Folder | 2 | NULL
अब तक इतना अच्छा है, ParentFolder_id
कॉलम सही ढंग से सेट किया जा रहा है, हालांकि मुझे नहीं पता कि यह एक और Folder_id
कॉलम क्यों बनाया गया है। अब, जब मैं निम्न कोड को चलाने का प्रयास करता हूं:
using (var session = SessionFactory.OpenSession())
{
// I'm using NHibernate 3
var rootFolder = session.Query<Folder>()
.Where(x => x.Name.StartsWith("root").First();
Console.WriteLine(rootFolder.SubFolders.Count());
}
लौटाई गई गिनती 0 है, और निम्न SQL निष्पादित है:
SELECT count(Id) FROM [Folder] WHERE Folder_id = 1
यह SQL कथन गलत है। यह करना चाहिए:
SELECT count(Id) FROM [Folder] WHERE ParentFolder_id = 1
क्या कोई मुझे बता सकता है कि Fluent NHibernate अतिरिक्त Folder_id
कॉलम क्यों बना रहा है और उस पर पूछताछ कर रहा है, और मैं इसे कैसे ठीक कर सकता हूं ताकि यह ठीक से ParentFolder_id
कॉलम से पूछताछ कर सके? मैंने कोई भाग्य के साथ निम्नलिखित ओवरराइड की कोशिश की है:
public class FolderOverride : IAutoMappingOverride<Folder>
{
public void Override(AutoMapping<Folder> mapping)
{
mapping.HasMany(x => x.SubFolders).Inverse(); // I thought inverse might fix it, but no dice
mapping.References(x => x.ParentFolder);
}
}
धाराप्रवाह-एनएच का कौन सा संस्करण आप चल रहे हैं? जहां तक मैं कह सकता हूं, इसे संस्करण 1.1 के रूप में बॉक्स से बाहर समर्थित किया जाना चाहिए: http://fluentnhibernate.lighthouseapp.com/projects/33236/tickets/115-self-referencing-relationships –
मैं सिर का उपयोग कर रहा हूं कुछ दिनों पहले ट्रंक का। –