Самостоятельная ссылка на таблицу - PullRequest
0 голосов
/ 23 мая 2010

так что я новичок в NHibernate и у меня проблема.Возможно, кто-то может помочь мне здесь.Имеется класс User со многими, многими свойствами:

public class User
{
    public virtual Int64 Id { get; private set; }
    public virtual string Firstname { get; set; }
    public virtual string Lastname { get; set; }
    public virtual string Username { get; set; }
    public virtual string Email { get; set; }
    ...
    public virtual string Comment { get; set; }
    public virtual UserInfo LastModifiedBy { get; set; }
}

Вот несколько DDL для таблицы:

CREATE TABLE USERS  
(  
    "ID" BIGINT NOT NULL ,   
    "FIRSTNAME" VARCHAR(50) NOT NULL ,   
    "LASTNAME" VARCHAR(50) NOT NULL ,   
    "USERNAME" VARCHAR(128) NOT NULL ,   
    "EMAIL" VARCHAR(128) NOT NULL ,   
    ...  
    "LASTMODIFIEDBY" BIGINT NOT NULL ,   
) IN "USERSPACE1" ; 

Поле таблицы базы данных 'LASTMODIFIEDBY' содержит для целей аудита идентификаторот пользователя, который действует в случае вставки или обновления.Обычно это будет админ.Поскольку пользовательский интерфейс должен отображать не этот Int64, а имя администратора (шаблон типа «Фамилия, Имя»), мне нужно получить эти значения, ссылаясь на таблицу USERS.Далее следует, что весь объект типа User будет излишним по количеству нежелательных полей.Таким образом, существует класс UserInfo с гораздо меньшим размером.

public class UserInfo
{
    public Int64 Id { get; set; }
    public string Firstname { get; set; }
    public string Lastname { get; set; }
    public string FullnameReverse
    {
        get { return string.Format("{0}, {1}", Lastname ?? string.Empty, Firstname ?? string.Empty); }
    }
}

Итак, здесь начинается проблема.На самом деле я понятия не имею, как выполнить эту задачу.Я не уверен, должен ли я также предоставлять сопоставление для класса UserInfo, а не только для класса User.Я хотел бы интегрировать класс UserInfo как Composite-элемент в отображение для User-класса.Но я не знаю, как определить соответствие между полями таблицы USERS.ID и USERS.LASTMODIFIEDBY.Надеюсь, я достаточно ясно описываю свою проблему, чтобы получить некоторые подсказки.Большое спасибо!

1 Ответ

1 голос
/ 23 мая 2010

Это похоже на плохой случай или преждевременную оптимизацию.

У вас действительно возникают проблемы с производительностью, если вы определите LastModifiedBy как User и используете <many-to-one> для сопоставления?

Это должно быть вашей отправной точкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...