gpt4 book ai didi

NHibernate:如何映射一个点?

转载 作者:行者123 更新时间:2023-12-03 16:40:25 26 4
gpt4 key购买 nike

我有一个包含点集合的类(而是 PointF)。

我希望能够使用 NHibernate 持久化该类的实例。

我的课看起来有点像这样(简化):

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>

现在的问题是,NHibernate 在处理映射文件时会抛出错误,因为 PointF 不是已知(映射)实体。

我怎样才能以最简单的方式解决这个问题?
如何确保 NHibernate 能够保存我的位置集合(使用它们的坐标(点)?

最佳答案

问题不在于您没有映射类型 PointF - 因为您将其映射为复合元素,这是正确的。

映射此类类型时,您需要确保

  • 属性是可写的(幸运的是这里的情况)
  • 它有一个默认构造函数,这里不是这种情况。

  • 那么在没有默认构造函数的情况下,NH 应该如何创建新的实例呢?它不能。

    您的选择是:
  • 实现拦截器或 NH 事件。我认为可以在那里注入(inject)创建某些类型实例的代码,但我不知道如何。
  • 实现一个 NH 用户类型(源自 ICompositeUserType ),这并不难做到
  • 映射另一种类型(例如,封装到 PointF)
  • 关于NHibernate:如何映射一个点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/807413/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com