У меня возникла проблема, и время, потраченное на то, что мне нужно, говорит мне, чтобы спросить сообщество stackOverflow. Итак: У меня есть базовая система управления версиями для файлов, представленных в виде абстрактного класса FileSystemEntry (FSE), который имеет 2 дочерних элемента - файл и папку. Существует также FileSystemEntryVersion (FSEV). FSE имеет много FSEV.NHibernate не смог решить «класс»
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; }
}
Вот файл hbm.xml для FSE (наиболее важная часть)
<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 сказано, что не может быть решена. Зачем?
Вы пробовали это: http://stackoverflow.com/questions/17283070/nhibernate-query-by-discriminator-on-association – Najera
@Najera Да, я сделал , Но получилось такое же исключение, пока я не попытался сделать псевдоним таким образом: CreateAliast («FileSystemEntry», «FileSystemEntry») ... но я не был уверен, почему это работает внезапно :) Radim Kohler установил это ясно, но я клянусь, я попробовал, и он вчера не работал: D Теперь он делает .. – Milanec