Я пытаюсь использовать NH для сопоставления с моделью данных, которая является слабой интерпретацией модели данных EAV / CR.
У меня большая часть работы работает, но я борюсь с отображением коллекции Entity.Attributes.
Вот эти таблицы:
--------------------
| Entities |
--------------------
| EntityId PK |-|
| EntityType | |
-------------------- |
-------------
|
V
--------------------
| EntityAttributes | ------------------ ---------------------------
-------------------- | Attributes | | StringAttributes |
| EntityId PK,FK | ------------------ ---------------------------
| AttributeId FK | -> | AttributeId PK | -> | StringAttributeId PK,FK |
| AttributeValue | | AttributeType | | AttributeName |
-------------------- ------------------ ---------------------------
Столбец AttributeValue реализован как столбец sql_variant, и для него я реализовал NHibernate.UserTypes.IUserType.
Я могу создать сущность EntityAttribute и сохранить ее напрямую, чтобы работала часть иерархии.
Я просто не уверен, как сопоставить коллекцию EntityAttributes с сущностью Entity.
Обратите внимание, что таблица EntityAttributes может (и имеет) содержать несколько строк для данной комбинации EntityId / AttributeId:
EntityId AttributeId AttributeValue
-------- ----------- --------------
1 1 Blue
1 1 Green
Строка StringAttributes выглядит следующим образом:
StringAttributeId AttributeName
----------------- --------------
1 FavoriteColor
Как эффективно сопоставить эту модель данных с моим доменом Entity, чтобы Entity.Attributes ("FavoriteColors") возвращал коллекцию избранных цветов? Напечатано как System.String?