2012-04-23 79 views
0

一個弱關係考慮以下3個表:映射到ORM

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

你的意思是在一個正常的方式映射?你想檢索並保存實體?我不相信有什麼辦法可以拯救實體。 – Rippo 2012-04-23 17:21:10

+0

我只想回收實體,我不在乎儲蓄。 – user315648 2012-04-24 08:17:11

回答

0

NHibernate的(使用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"); 

,那麼你可以使用它作爲簡單關聯(除非你只能設置映射實體)