【发布时间】:2017-10-16 08:27:47
【问题描述】:
请看下面的域对象:
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 代码映射来做到这一点,因此也是这个问题的原因。
【问题讨论】:
-
您是否考虑过通过组件映射它们 (github.com/jagregory/fluent-nhibernate/wiki/…)?如果您的数据在同一个表中,这可能是一个更容易的起点。
-
@David Osbourne,+1 - 该链接实际上非常有帮助。我将 Fluent NHibernate 中的代码改编为代码映射,现在它可以按预期工作(请参阅我的答案)。你能发布一个答案,以便我可以给予一些信任吗?
标签: c# nhibernate domain-driven-design