Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果表中没有索引,如何配置NHibernate映射到数组?_Nhibernate - Fatal编程技术网

如果表中没有索引,如何配置NHibernate映射到数组?

如果表中没有索引,如何配置NHibernate映射到数组?,nhibernate,Nhibernate,我有一个现有的POCO类库,其中子集合都存储在数组中。例如,Customer类有一个Invoice[]数组来保存其发票: class Customer { public int ID; public Invoice[] _invoices; } class Invoice { public int ID; public int CustomerID; public string SomeData; } 我无法更改这些类,我希望使用NHibernate将

我有一个现有的POCO类库,其中子集合都存储在数组中。例如,Customer类有一个Invoice[]数组来保存其发票:

class Customer
{
    public int ID;
    public Invoice[] _invoices;
}

class Invoice
{
    public int ID;
    public int CustomerID;
    public string SomeData;
}
我无法更改这些类,我希望使用NHibernate将它们映射到现有数据库

我查看了
映射,但它似乎需要
元素。在我的数据库中,
[Invoice]
表没有索引列。加载客户的发票时,我不希望它们位于阵列中的任何特定位置


我的选择是什么?

不幸的是,您的选择是更改您的类或表

A) 您可以更改
Customer
,将发票声明为
IList
,而不是数组;然后,您将能够将它们映射为。您甚至可以按某些列对其进行排序:

<bag name="Invoices" table="Invoices" order-by="ID ASC"> <!-- order-by is optional -->
  <key column="CustomerID"/>
  <element column="SomeData" type="String"/>
  <!-- or use one-to-many if Invoice is mapped as entity -->
  <one-to-many class="Whatever.Invoice, Whatever"/>
</bag>

B) 。您可以将表更改为包含索引列,并将发票映射为真实的



@chssly76:这是一个相当大的项目,因此我愿意投入相当多的时间来实现这一点,而不改变类或数据库。如果我愿意扩展NHibernate并提供自己的数组映射实现,该怎么办?这么简单吗(我对NHibernate完全陌生,所以我不知道其中涉及到什么)?我是否可以对默认数组映射进行子类化,并仅在内存中动态生成顺序索引值?也许我应该在NH邮件列表上讨论一下……您当然可以实现自己的收集类型;为此,您需要实现
IUserCollectionType
,并通过映射中的
collection type
属性引用类名。这里有一篇关于这个主题的文章:;它处理Hibernate/java,但是几乎所有的东西都应该可以直接移植到NHibernate上。@chssly76:谢谢你的指点。我检查了
IUserCollectionType
ArrayType
PersistentArrayHolder
类。似乎我可以毫不费力地将
ArrayType
子类化。
<array name="Invoices" table="Invoices" order-by="ID ASC"> <!-- order-by is optional -->
  <key column="CustomerID"/>
  <index column="IndexNr"/>
  <element column="SomeData" type="String"/>
</array>