考虑这3个表:
Client
- Id
Product
- Id
Invoice_Row
- Id
- LinkedObjectId
- LinkedObjectType
Invoice_row使用LinkedObjectId和LinkedObjectType字段引用上面的表格,例如:
Invoice_row ID = 1
- LinkedObjectId = 1 (meaning product id = 1)
- LinkedObjectType = 'Product'
Invoice_row ID = 2
- LinkedObjectId = 1 (meaning client id = 1)
- LinkedObjectType = 'Client'
正如您所看到的,invoice_row有两个其他表的动态密钥(意味着它实际上不是密钥)。它通过首先查看LinkedObjectType(要引用的表)然后通过LinkedObjectId(引用表中的特定ID)来引用另外两个表。
是的我知道这很糟糕,但这是我必须使用的遗留数据模型。
有没有办法以正常方式(使用NH或EF)以某种方式映射,如下所示:
Client
Invoice_Rows
Product
Invoice_Rows
谢谢!
答案 0 :(得分:0)
(使用Fluentmapping)
class Invoice
{
public virtual IHasInvoices Owner { get; set; }
// or
public virtual object Owner { get; set; }
}
// in InvoiceMap
ReferencesAny(x => x.Owner)
.EntityIdentifierColumn("LinkedObjectId")
.EntityTypeColumn("LinkedObjectType")
.IdentityType<long>()
.AddMetaValue<Product>("product")
.AddMetaValue<Client>("client");
然后您可以将它用作简单关联(除了您只能设置映射实体)