NHibernate从类生成映射?

时间:2010-03-11 02:43:34

标签: c# .net nhibernate

有没有办法从POCO为NHibernate生成映射?这个reply to my question使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是root。)

2 个答案:

答案 0 :(得分:3)

您可能需要了解Fluent NHibernate的自动映射功能:http://wiki.fluentnhibernate.org/Auto_mapping

答案 1 :(得分:0)

为了让NHibernate为您的实体类构建代理,您需要使非私有成员成为虚拟成员。公共字段不适用于代理对象,这些字段应转换为属性。

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

Fluent NHibernate能够从类创建映射。它可以automap基于约定,或者您可以编写自己的mappers

您的实体和表格可能与默认conventions不匹配,有几种方法可以覆盖它们。

使用类映射,您的映射可能如下所示:

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 );
    }
}