NHibernate:如何绘制一个点?
我有一个类,它包含一组点(而不是点F) 我希望能够使用NHibernate持久化该类的实例 我的课堂看起来有点像这样(简化):NHibernate:如何绘制一个点?,nhibernate,Nhibernate,我有一个类,它包含一组点(而不是点F) 我希望能够使用NHibernate持久化该类的实例 我的课堂看起来有点像这样(简化): 公共类MyClass { 公共IDictionary Points=新字典(); 公共无效添加点(位置,点F位置) { 点。添加(位置、位置); } } 此集合的映射如下所示(简化): 现在的问题是,NHibernate在处理映射文件时抛出错误,因为PointF不是已知(映射)实体 我如何用最简单的方法解决这个问题? 如何确保NHibernate能够持久保存我的位
公共类MyClass
{
公共IDictionary Points=新字典();
公共无效添加点(位置,点F位置)
{
点。添加(位置、位置);
}
}
此集合的映射如下所示(简化):
现在的问题是,NHibernate在处理映射文件时抛出错误,因为PointF不是已知(映射)实体
我如何用最简单的方法解决这个问题?
如何确保NHibernate能够持久保存我的位置集合(及其坐标(点)?问题不在于您没有映射类型
PointF
,因为您将其映射为复合元素,这是正确的
映射此类类型时,需要确保
- 属性是可写的(幸运的是,这里就是这种情况)
- 它有一个默认构造函数,这里不是这样
- 实现一个拦截器或NH事件。我认为可以在那里注入代码来创建特定类型的实例,但我不知道如何实现
- 实现一个NH用户类型(派生自
),这并不难做到ICompositeUserType
- 映射另一种类型(例如包装器到PointF)
public class MyClass
{
public IDictionary<string, PointF> Points = new Dictionary<string, PointF>();
public void AddPoint( location, PointF position )
{
Points.Add(location, position);
}
}
<map name="Points" table="Locations">
<key column="MyClassId" />
<index column="LocationName" />
<composite-element class="System.Drawing.PointF, System.Drawing">
<property name="X" column="X" />
<property name="Y" column="Y" />
</composite-element>
</map>