我试图利用NH映射到一个宽松解释的EAV/CR数据模型。
我已经完成了大部分工作,但在映射实体属性集合时遇到了困难。
这是相关的表:
--------------------
| 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.Attributes("FavoriteColors")返回一个收藏夹颜色的集合?类型为System.String?