adr*_*rin 1 nhibernate domain-driven-design fluent-nhibernate
我有以下实体
public class Employee
{
public virtual int Id {get;set;}
public virtual ISet<Hour> XboxBreakHours{get;set}
public virtual ISet<Hour> CoffeeBreakHours {get;set}
}
public class Hour
{
public DateTime Time {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
(我想在这里做的是员工A每天播放Xbox的商店信息,比如9:00 13:30,每天7:00 12:30 18:00喝咖啡休息时间) - 我不确定我的方法这里有效.
问题是我的(理想上流畅的)映射应该如何?对于Hour类来说,没有必要(从我的角度来看)具有Id或可以从某种存储库访问.
根据你想如何做到这一点,您可能需要您的集合映射为一个元素映射或作为一个组件集合(这是<element>和<composite-element>在NHibernate的术语).前者需要一个IUserType定义,而后者则需要一个,如果你要让你的Hour班级有一个以上的财产.
如果您坚持使用单个属性,则需要定义一个IUserTypeNHibernate,知道如何将类型转换为数据库.完成后,您可以使用Fluent NHibernate进行映射,如下所示:
HasMany(x => x.XboxBreakHours)
.Element("value", x => x.CustomType<YourUserType>);
Run Code Online (Sandbox Code Playgroud)
这指定您的集合存储在一个表中,该表包含一个value包含实际值的列.该CustomType调用是告诉NHibernate使用IUserTypefor this collection的.
如果您的Hour类中有多个属性,则需要执行以下操作(注意:这实际上与执行Component映射非常相似).
HasMany(x => x.XboxBreakHours)
.Component(comp =>
{
comp.Map(x => x.Time);
comp.Map(x => x.Another);
});
Run Code Online (Sandbox Code Playgroud)