我遇到了问题,花费的时间告诉我,请问stackOverflow社区。所以: 我有基本的版本控制系统,文件表示为抽象类FileSystemEntry(FSE),它有2个子项 - 文件和文件夹。还有FileSystemEntryVersion(FSEV)。 FSE有很多FSEV。
public abstract class FileSystemEntry
{
public FileSystemEntry(){}
public virtual long Id { get; protected set; }
public virtual IList<FileSystemEntryVersion> Versions { get; set; }
}
这是FSEV:
public class FileSystemEntryVersion {
public FileSystemEntryVersion(){}
public virtual long Id { get; protected set; }
public virtual String Name { get; set; }
//pointer to physical file/folder
public virtual FileSystemEntry FileSystemEntry { get; set; }
//pointer to parent file/folder
public virtual FileSystemEntry ParentFolder { get; set; }
}
这是FSE的hbm.xml文件(最重要的部分)
<class name="FileSystemEntry" table="[FileSystemEntry]" abstract="true">
<id name="Id" type="Int64">
<generator class="identity" />
</id>
<discriminator column="Type"
not-null="true"
type="String"/>
<subclass name="File"
discriminator-value="File"/>
<subclass name="Folder"
discriminator-value="Folder"/>
</class>
每个FSEV(都有父文件夹)。我想创建一个查询,它只获取父文件夹中包含的文件夹。我目前的疑问是:
IList<FileSystemEntryVersion> versions =
session.CreateCriteria<FileSystemEntryVersion>()
.Add(Restrictions.Eq("ParentFolder.Id", parentFolderId))
.Add(Restrictions.Eq("FileSystemEntry.class", typeof(Folder)))))
.List<FileSystemEntryVersion>();
return versions;
但FileSystemEntry.class中的属性“class”表示无法解析。为什么?
答案 0 :(得分:1)
你快到了:
var versions = session
.CreateCriteria<FileSystemEntryVersion>()
.Add(Restrictions.Eq("ParentFolder.Id", parentFolderId))
// we do need a reference here, JOIN in fact,
// to include the Many-to-One table
.CreateAlias("FileSystemEntry ", "Entry")
// now the SELECT will contain even the FileSystemEntry table
// and can start evaluate
.Add(Restrictions.Eq("Entry.class", typeof(Folder)))))
.List<FileSystemEntryVersion>();