Fluent-NHibernate自动映射

Fluent-NHibernate自动映射,nhibernate,fluent-nhibernate,nhibernate-mapping,fluent-nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,Fluent Nhibernate Mapping,我只是想知道是否可以使用Fluent NHibernate自动映射.Net TcpClient对象 我有一个类,它有一个我想要映射的TcpClient属性 我尝试创建一个从TcpClient继承的名为tTcpClient的自定义类,并使用getter/setter添加一个Id属性;但是,它仍然在寻找基类的Id字段 如果可能的话,有人有什么想法吗?或者我需要为TcpClient创建自己的xml映射吗 我有点希望能够保存这个对象,以便在重新加载应用程序时轻松地重新创建它,并将TcpClient对象的

我只是想知道是否可以使用Fluent NHibernate自动映射.Net TcpClient对象

我有一个类,它有一个我想要映射的TcpClient属性

我尝试创建一个从TcpClient继承的名为tTcpClient的自定义类,并使用getter/setter添加一个Id属性;但是,它仍然在寻找基类的Id字段

如果可能的话,有人有什么想法吗?或者我需要为TcpClient创建自己的xml映射吗

我有点希望能够保存这个对象,以便在重新加载应用程序时轻松地重新创建它,并将TcpClient对象的属性绑定到PropertiesGrid,并允许通过这个相当简单的配置

谢谢。内森

你看过这个项目吗


干杯

NHibernate不知道如何处理复杂类型,如TcpClient开箱即用。但它允许您提供自己的加载和存储代码。您可以使用:

并在hbm中这样映射:

<property name="_tcpClient" type="MyNamespace.TcpClientMapper, MyAssembly">
    <column name="Address" />  <!-- NullSafeGet/Set index == 0 -->
    <column name="Port" />     <!-- NullSafeGet/Set index == 1 -->
</property>

或者使用fluent:

公共类TcpClientUserTypeConvention:UserTypeConvention{
}

我明白了。我必须实现IUserType的所有方法,然后我认为它才能工作?如果是这样,您将如何为此实现NullSafeSet?我的类中的属性本身仍然是常规的TcpClient权限,或者我需要将其更改为ClientMapper类吗?是的,您必须实现所有方法,这并不难,请查看答案中的链接。属性仍然是一个常规的TcpClient(从设计的角度来看,这有点奇怪)。请参阅NullSafeSet实现的最后一次编辑。这看起来很棒,感谢您的帮助。另一个简短的问题?如何知道发送到Strings[]数组的内容的顺序?我知道您正在读取属性,但您如何知道地址位于数组中的位置0,端口位于位置1?我问的原因是b/c我正在尝试为串行连接实现相同的功能。请参阅我上次的编辑,映射文件中列出了列,IUserType实现中使用了相同的顺序。还有一件事。在实现了这一点之后,当我尝试使用包含TcpClient的ConnectionCp保存对象时,我得到一个,{“未能将参数值从IPAddress转换为Byte[]”异常。我查看了NullSafeSet,它似乎得出了正确的值。有什么想法吗?这应该像Fluent的自动映射或类似的功能吗?我几乎否决了这一点,认为它完全脱离了主题,但后来意识到,实际上可以使用自动映射器作为解决此问题的一部分。我将很快写详细信息。首先创建一个单独的类,该类包含您希望NHibernate保留到数据库的所有数据。然后使用AutoMapper(用于将数据从一个对象复制到另一个对象的工具)将值从持久化对象移动到TcpClient实例上?如何从中获得NHibernate映射?
<property name="_tcpClient" type="MyNamespace.TcpClientMapper, MyAssembly">
    <column name="Address" />  <!-- NullSafeGet/Set index == 0 -->
    <column name="Port" />     <!-- NullSafeGet/Set index == 1 -->
</property>
public class TcpClientUserTypeConvention : UserTypeConvention<TcpClientMapper> {
}