我有两个课程: lz_nc_Folder 和 lz_nc_Document 。
lz_nc_Folder 包含lz_nc_Folder和lz_nc_Document的列表。我的类和地图结构是这样的:
public class lz_nc_Folder
{
public lz_nc_Folder()
{
nc_Folders = new List<lz_nc_Folder>();
nc_Documents = new List<lz_nc_Document>();
}
[DataMember]
public virtual int id_folder { get; set; }
[DataMember]
public virtual int id_parent_folder { get; set; }
[DataMember]
public virtual string name_folder { get; set; }
[DataMember]
public virtual IList<lz_nc_Folder> nc_Folders { get; set; }
[DataMember]
public virtual IList<lz_nc_Document> nc_Documents { get; set; }
}
public partial class lz_nc_Document
{
[DataMember]
public virtual int id { get; set; }
public virtual lz_nc_Folder parent_folder { get; set; }
[DataMember]
public virtual string title { get; set; }
}
public class lz_nc_FolderMap : ClassMap<lz_nc_Folder>
{
public lz_nc_FolderMap()
{
Table("nc_Folder");
LazyLoad();
Id(x => x.id_folder).GeneratedBy.Identity().Column("id_folder");
Map(x => x.id_parent_folder).Column("id_parent_folder");
Map(x => x.name_folder).Column("name_folder").Length(255);
HasMany(x => x.nc_Folders).KeyColumn("id_parent_folder").BatchSize(100);
HasMany(x => x.nc_Documents).KeyColumn("idFolder").BatchSize(100);
}
}
public class lz_nc_DocumentMap : ClassMap<lz_nc_Document>
{
public lz_nc_DocumentMap()
{
Table("nc_Document");
LazyLoad();
Id(x => x.id).GeneratedBy.Identity().Column("id");
References(x => x.parent_folder).Column("idFolder");
Map(x => x.title).Column("title").Length(100);
}
}
我想要做的是执行此命令并获得结果:
lz_nc_Folder root = (from x in Session.Query<lz_nc_Folder>()
where x.id_parent_folder == null
select x)
.FetchMany(x => x.nc_Folders)
.FirstOrDefault();
如何在不使用eager-load的情况下递归获取此子文件夹的lz_nc_Folder?
我的问题的第二个版本是:我如何只使用fetch或fetchMany获取文档(这里不需要子文件夹)?我不想使用急切负载。我只需要在调用fetch / fetchmany时加载文档。
我希望这段代码能够成功执行:
lz_nc_Folder root = (from x in Session.Query<lz_nc_Folder>()
where x.id_parent_folder == null
select x)
.FetchMany(x => x.nc_Notifications)
.FirstOrDefault();
提前致谢。