请参阅以下域名对象:
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代码映射做这个,因此问题的原因。
答案 0 :(得分:1)
您是否看过通过components映射它们?
与自定义类型相比,如果您的数据位于同一个表格中,这可能是一个更容易的起点。
答案 1 :(得分:0)
继David Osbournes评论之后;答案是这样做:
Component(x => x.FirstName, y =>
{
y.Property<string>(z => z.FirstName);
});
NHibernate使用类的FirstName属性映射到数据库。