0

次の 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 には、他の 2 つのテーブルに対する動的キー (実際にはキーではないことを意味します) があります。最初に LinkedObjectType (どのテーブルを参照するか) を参照し、次に LinkedObjectId (参照されるテーブルの特定の ID) を参照して、他の 2 つのテーブルを参照します。

はい、これが悪いことだとわかっていますが、これは私が使用しなければならない従来のデータ モデルです。

次のように、これを通常の方法で (NH または EF のいずれかを使用して) 何らかの形でマッピングできる方法はありますか?

Client
    Invoice_Rows
Product
    Invoice_Rows

ありがとう!

4

1 に答える 1

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");

次に、それを単純な関連付けとして使用できます (ただし、マップされたエンティティのみを設定できます)。

于 2012-04-26T10:53:08.527 に答える