c# - 使用 HBM 文件将字典映射到 NHibernate 中的子表

标签 c# nhibernate hibernate-mapping

我有一个与此类似的表结构,为简洁起见进行了简化

CREATE TABLE Parent (
  ParentId NUMBER NOT NULL,
  CONSTRAINT ParentId_PK PRIMARY KEY ParentId
);

CREATE TABLE Attribute (
  ParentId NUMBER NOT NULL,
  Key NVARCHAR2(200) NOT NULL,
  Value NVARCHAR2(4000) NOT NULL,
  CONSTRAINT Attribute_PK PRIMARY KEY (ParentId, Key),
  CONSTRAINT ParentId_FK FOREIGN KEY (ParentId)
      REFERENCES Parent (ParentId)
);

我想将子键和值映射到名称值对,并将列表作为字典存储在到父级的映射中。代码如下所示:

public class Parent
{
    public long Id { get; set; }
    public Dictionary<string, string> Attributes { get; set; }
}

看起来这应该是可能的,但我似乎无法找出放置在 HBM 文件中的正确映射。

最佳答案

@Rippo - 您的评论向我指出了解决方案,但我在此处发布代码以根据指南显示解决方案。

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="com.so.answers" namespace="com.so.answers">
  <class name="Parent" table="Parent" lazy="false">
    <id name="Id" column="ParentId" />
    <map name="Attributes" table="Attribute">
      <key column="ParentId"/>
      <index column="Key" type="System.String"/>
      <element column="Value" type="System.String"/>
    </map>
  </class>
</hibernate-mapping>

关于c# - 使用 HBM 文件将字典映射到 NHibernate 中的子表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16423179/

相关文章:

java - 组织.hibernate.DuplicateMappingException : Table contains physical column name [coverage_name] referred to by multiple physical column names:

java - Hibernate 5 : org. hibernate.MappingException: 未知实体

c# - NHibernate 返回错误的对象列表

java - 检测到死锁时 Hibernate session 不同步

c# - 使用缺失日期 LINQ 填充列表

c# - 如何(单元)测试弱引用列表的内存管理功能?

c# - 从 MembershipUserCollection 获取单个 MembershipUser

c# - SharePoint 人物编辑器不显示用户

nHibernate 复合键类类型不匹配

c# - 这些是什么类型的关系?