如何在NHibernate中使用自定义对象

时间:2017-10-16 08:27:48

标签: c# nhibernate domain-driven-design

请参阅以下域名对象:

public Class Person
{
    public virtual Guid Id { get; protected set; }
    public virtual string FirstName { get; protected set; }
    public virtual string Surname { get; protected set; }
    public virtual System.DateTime DateOfBirth { get; protected set; }

        //Domain methods are here.

}

和下面的NHibernate映射:

public class PersonMap : ClassMapping<Person>
{
    public PersonMap()
    {
        Id<Guid>(x => x.Id);
        Property<string>(x => x.FirstName);
        Property<string>(x => x.Surname);
        Property<DateTime>(x => x.DateOfBirth);
    }

}

这可以按预期工作。假设我想将域模型更改为:

public Class Person
{
    public virtual Guid Id { get; protected set; }
    public virtual FirstName FirstName { get; protected set; }
    public virtual Surname Surname { get; protected set; }
    public virtual DateOfBirth DateOfBirth { get; protected set; }
}

请注意,基本类型将替换为对象。我这样做的原因是消除原始的迷恋,如下所述:http://enterprisecraftsmanship.com/2015/03/07/functional-c-primitive-obsession/

我已阅读此处的文档(第144页):http://stc.sbu.ac.ir/AdminTools/Docs/Files/nhibernate_reference.pdf。它告诉我引入自定义类型。我也读过这个问题:nHibernate mapping to custom types。我仍然在努力用NHibernate代码映射做这个,因此问题的原因。

2 个答案:

答案 0 :(得分:1)

您是否看过通过components映射它们?

与自定义类型相比,如果您的数据位于同一个表格中,这可能是一个更容易的起点。

答案 1 :(得分:0)

继David Osbournes评论之后;答案是这样做:

Component(x => x.FirstName, y =>
                {
                    y.Property<string>(z => z.FirstName);
                });

NHibernate使用类的FirstName属性映射到数据库。