Sto tentando di utilizzare NH per mappare un modello di dati che è un'interpretazione errata del modello di dati EAV/CR.Uso di NHibernate con un modello di dati EAV
Ho quasi tutto funzionante ma sto facendo fatica a mappare la raccolta Entity.Attributes.
Qui ci sono le tabelle in questione:
--------------------
| Entities |
--------------------
| EntityId PK |-|
| EntityType | |
-------------------- |
-------------
|
V
--------------------
| EntityAttributes | ------------------ ---------------------------
-------------------- | Attributes | | StringAttributes |
| EntityId PK,FK | ------------------ ---------------------------
| AttributeId FK | -> | AttributeId PK | -> | StringAttributeId PK,FK |
| AttributeValue | | AttributeType | | AttributeName |
-------------------- ------------------ ---------------------------
La colonna AttributeValue è implementato come una colonna sql_variant e ho implementato un NHibernate.UserTypes.IUserType per esso.
Posso creare un'entità EntityAttribute e persistere direttamente in modo che parte della gerarchia funzioni.
Non so come mappare la raccolta EntityAttributes all'entità Entity.
Nota tavolo EntityAttributes potrebbe (e lo fa) contenere più righe per una combinazione data EntityID/AttributeID:
EntityId AttributeId AttributeValue
-------- ----------- --------------
1 1 Blue
1 1 Green
StringAttributes fila si presenta così per questo esempio:
StringAttributeId AttributeName
----------------- --------------
1 FavoriteColor
Come posso mappare in modo efficace questo modello di dati al mio dominio Entity in modo che Entity.Attributes ("FavoriteColors") restituisca una raccolta di colori preferiti? Digitato come System.String?
Si sta utilizzando fluente? –
Se si pianifica di trovare le entità in base ai valori degli attributi, non sono sicuro che sql_variant funzioni correttamente. Dovresti provare questo. –