Aşağıdaki sınıf tarafından temsil edilen bir klasör hiyerarşisi var:Kendi kendini referans alan bir klasör hiyerarşisini eşleştirmek için Fluent NHibernate'i nasıl kullanırım?
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; }
}
Diğer bir deyişle, her Folder
bir ParentFolder
'ye ait olabilir, ayrıca SubFolders
'ün altında olabilir. Fluent NHibernate'in Automapper
kullanıyorum ve SchemaExport
kullanarak otomatik olarak veritabanı şemasını oluşturuyorum. Bazı test klasörlerini kaydetmeye çalıştığımda aşağıdaki tabloyu alırım:
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
Şimdiye kadar çok iyi, ParentFolder_id
sütunu doğru ayarlanıyor, ancak neden başka bir Folder_id
sütunu yaratıldığını bilmiyorum. Şimdi, aşağıdaki kodu çalıştırmayı denediğimde:
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());
}
Geri döndürülen sayı 0'dır ve aşağıdaki SQL çalıştırılır:
SELECT count(Id) FROM [Folder] WHERE Folder_id = 1
Bu SQL deyimi yanlıştır. Yapması gereken:
SELECT count(Id) FROM [Folder] WHERE ParentFolder_id = 1
Herkes Fluent NHibernate'in neden fazladan Folder_id
sütun oluşturduğunu ve üzerinde sorgulama yaptığını ve bunun yerine ParentFolder_id
sütununu düzgün şekilde sorgulayabilmesi için bunu nasıl düzeltebileceğini söyleyebilir mi? Şanssız olarak aşağıdaki geçersiz kılmayı denedim:
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);
}
}
Hangi akıcı-NH sürümünü kullanıyorsunuz? Anlayabildiğim kadarıyla, bu sürüm 1.1'den itibaren desteklenmelidir: http://fluentnhibernate.lighthouseapp.com/projects/33236/tickets/115-self-referencing-relationships –
Kafayı kullanıyorum Birkaç gün önce bagajın. –