我有3个实体:类User {id,name...}类UserUrl {id,user_id,url,url_type_id}类UrlType {id,name}我的映射:
<class name="User" table="Users" lazy="false">
<id name="id" type="Int32" column="id">
<generator class="identity" />
</id>
<property name="name" column="name" type="String"/>
<map name="Urls" table="UserUrl">
<key column="user_id"></key>
<index-many-to-many class="UrlType" column="url_type_id"/>
<one-to-many class="UserUrl"/>
</map>
</class>
<class name="UserUrl" table="UserUrl">
<id name="id" type="Int32" column="id">
<generator class="identity"/>
</id>
<property name="user_id" column="user_id" type="Int32"/>
<many-to-one name="UrlType" column="url_type_id" class="UrlType"/>
<property name="Url" column="url" type="String" not-null="true"/>
</class> >
所以User.Urls就是IDictionary<UrlType,UserUrl>。但我想要获取字典键,其中字符串键是UrlType.name。有人知道怎么做吗?
发布于 2009-08-05 13:00:58
NHibernate将为您提供一个集合接口,在本例中为IDictionary,因为它的实现将涉及代理和缓存,您不会想知道细节。所以你得不到字典。
我的问题是,你为什么需要一个字典,你通过IDictionary接口访问所有的数据,一个具体的类会提供什么额外的功能?
发布于 2009-08-13 09:09:14
我发现了desition。
映射:
<class name="User" table="Users" lazy="false">
<id name="id" type="Int32" column="id">
<generator class="identity" />
</id>
<property name="name" column="name" type="String"/>
<map name="Urls" lazy="true" cascade="all-delete-orphan" inverse="true">
<key column="user_id"></key>
<index column="im_type_id" type="Int32"/>
<one-to-many class="UserUrl"/>
</map>
</class>
<class name="UserUrl" table="UserUrl">
<id name="id" type="Int32" column="id">
<generator class="identity"/>
</id>
<property name="user_id" column="user_id" type="Int32"/>
<property name="UrlType" column="url_type_id" type="Int32" not-null="true" />
<property name="Url" column="url" type="String" not-null="true"/>
</class>代码:
public sealed class UrlType
{
private const string _Facebook = "Facebook";
private const string _Myspace = "Myspace";
private const string _Youtube = "Youtube";
public static readonly int Facebook;
public static readonly int Myspace;
public static readonly int Youtube;
static UrlType()
{
Facebook = FindByName(_Facebook).Id;
Myspace = FindByName(_Myspace).Id;
Youtube = FindByName(_Youtube).Id;
}
}使用:
User curUser = FindById(2);
string facebookUrl = curUser.Urls[UrlType.Facebook].Url; 但是要花费更多时间从数据库获取Urls类型的It
https://stackoverflow.com/questions/1232303
复制相似问题