0

私には3つのエンティティがあります:class User {id、name ...} class UserUrl {id、user_id、url、url_type_id} class 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>です。<string,UserUrl>しかし、文字列キーがUrlType.nameであるDictionaryを取得したいと思います。誰かがこれを行う方法を知っていますか?

4

2 に答える 2

0

目的がわかります。
マッピング:

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

ただし、DB から Urls タイプの ID を取得するのに時間がかかります

于 2009-08-13T09:09:14.433 に答える
0

NHibernate はコレクション用のインターフェースを提供します。この場合、IDictionary の実装にはプロキシとキャッシングが含まれ、詳細を知りたくないでしょう。したがって、辞書は取得できません。

私の質問は、なぜ辞書が必要なのかということです.IDictionaryインターフェースを介してすべてのデータにアクセスします.具象クラスはどのような追加機能を提供しますか?

于 2009-08-05T13:00:57.540 に答える