NHibernate генерировать отображения из классов? - PullRequest
2 голосов
/ 11 марта 2010

Есть ли способ генерировать сопоставления для NHibernate из POCO? Этот ответ на мой вопрос делает NHibernate очень интересным. Однако у меня есть много классов, которые выглядят так:

public class register_email_job
{
    public PK id;
    public user_data user;
}

public class user_comment : BaseComment2
{
    [IsNullable]
    public user_comment parent;
    public user_data user;
}

Я хотел бы легко перевести это в нечто совместимое с NHibernate. Я не возражаю против изменения некоторых запросов, но я предпочитаю не переписывать каждый класс, чтобы использовать свойства и изменять класс таким образом, что мне нужно изменить способ его использования везде.

-edit- Обратите внимание, что я использую наследование, а user_comment имеет объект user_comment (то есть, почему он должен иметь значение NULL)

Ответы [ 2 ]

3 голосов
/ 11 марта 2010

Возможно, вы захотите взглянуть на способности Auto Mapping в Fluent NHibernate: http://wiki.fluentnhibernate.org/Auto_mapping

0 голосов
/ 12 марта 2010

Чтобы NHibernate создавал прокси-серверы для ваших классов сущностей, вам нужно будет сделать своих не приватных участников виртуальными. Открытые поля не будут работать с прокси-объектами, их следует преобразовать в свойства.

public class register_email_job
{
    public virtual PK id { get; set; }
    public virtual user_data user { get; set; }
}

Свободный NHibernate способен создавать сопоставления из классов. Он может automap на основе соглашений или вы можете написать свои собственные mappers .

Ваши сущности и таблицы могут не соответствовать стандартным соглашениям , существует несколько способов их переопределить.

Используя карту классов, ваше отображение может выглядеть так:

public class register_email_job_map : ClassMap<register_email_job>
{
    public register_email_job_map()
    {
        Id( x => x.Id );
        References( x=> x.user );
    }
}

public class user_comment_map : ClassMap<user_comment>
{
    public register_email_job_map()
    {
        // properties from BaseComment2
        References( x=> x.user );
        References( x=> x.parent );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...