我在FluentNHibernate中有一个映射用于HasMany关系,我想在其上指定一个表来覆盖nHibernate将查找那些我有很多对象的默认表。这有意义吗?
因此,假设我有一个发票表和一个InvoiceItems表,让我说我有一个名为InvoiceItemsTwo的表。
我有一个Invoice类和一个InvoiceItem类,它们的映射非常简单。我想在我的Invoice映射中指定它应该在InvoiceItemsTwo中查找它的项目,而不是默认的InvoiceItems。
所以我对这种关系的映射看起来像这样
HasMany(c => c.InvoiceItems).Cascade.SaveUpdate().Table("InvoiceItemsTwo");
但这不起作用。我一直在运行时从我的网站上收到错误,该错误显示无效对象名称'InvoiceItems'。
为什么忽略了我在关系映射中明确指定表的事实?
我尝试在运行时转储映射,并且正在设置类似这样的
<bag cascade="save-update" table="InvoiceItemsTwo">
有什么想法吗?
答案 0 :(得分:2)
table
属性仅适用于多对多关系,而非一对多关系。
答案 1 :(得分:0)
您无法在映射类中指定其他表。 Fluent NHibernate使用映射在属性列表(InvoiceItems)上的类。 如果yoy想要使用另一个类来映射您的详细信息表,则必须创建一个InvoceItemsTwo类并将其映射到主表类中。
答案 2 :(得分:0)
您可以将列表映射为复合元素而不是一对多关系,然后将其映射到另一个表。但它不是一个好主意。考虑到NH需要知道存储内存中对象的位置。因此,可能会将对象存储在错误的表中。