Полиморфный запрос nhibernate с проекцией - PullRequest
2 голосов
/ 02 декабря 2010

Используя одну таблицу для иерархии классов, я хотел бы использовать проекцию, чтобы сгладить иерархию и представить пользователю список результатов.

Есть ли способ сделать это с помощью HQL или Criteria APIбез необходимости создавать несколько отдельных запросов или объединений?


Классы

public class A {
    public virtual long Id { get; set; }
}

public class B : A {
    public virtual DateTime SomeDate { get; set; }
    public virtual OtherEntity Other { get; set; }
}

public class C : A {
    public virtual DateTime? SomeDate { get; set; }
    public virtual string Description { get; set; }
}

public class D : A {
    public virtual string Description { get; set; }
}

public class OtherEntity {
    public virtual string Name { get; set; }
}

Таблицы SQL:

CREATE TABLE Items (
    Id bigint NOT NULL PRIMARY KEY,
    Kind char(1) NOT NULL,
    SomeDate datetime NULL,
    Description NULL
)

CREATE TABLE OtherEntity (
    Id bigint NOT NULL PRIMARY KEY,
    Name nvarchar(255) NOT NULL
)

Выходная проекция:

public class ItemReport {
    // From A.Id
    public virtual long Id { get; set; }

    // From B.SomeDate or C.SomeDate
    public virtual DateTime? SomeDate { get; set; }

    // From C.Description or D.Description
    public virtual string Description { get; set; }

    // From B.OtherEntity.Name
    public virtual string OtherName { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...