私は整数値を格納し、リスト内で選択されたビット単位の値の合計を含むデータベースを持っています。例えば:NHibernateのリストにビットごとの合計をマップする方法
VALUE DESCRIPTION
----- -----------
1 Option 1
2 Option 2
4 Option 3
8 Option 4
のは、オプション2 & 4を言おうが(それも可能だ場合)、私は方法を考え出す苦労を抱えている選択されているので、フィールドに格納された値は、10
だろうhbm.xmlファイルでこれを表現します。ここで
は、私が何をしようとしているの一般的な例である:
製品表の列
Id, int
Name, varchar(25)
Services, int
サービス表の列
Id, int
Name, varchar(25)
Product.cs
public class Product
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Service> Services { get; set; }
}
Service.cs
public class Service
{
public virtual int Id { get; set; } // bit values: 1, 2, 4, 8, ...
public virtual string Name { get; set; }
}
Product.hbm.xml
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="AppNS" namespace="AppNS">
<class name="Product" table="Product">
<id name="Id" column="Id" type="int">
<generator class="native"/>
</id>
<property name="Name" column="Name" type="string"/>
<????? name="Services" column="Services" type="AppNS.Service"/>
</class>
</hibernate-mapping>
Service.hbm.xml
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="AppNS" namespace="AppNS">
<class name="Service" table="Service">
<id name="Id" column="Id" type="int">
<generator class="native"/>
</id>
<property name="Name" column="Name" type="string"/>
</class>
</hibernate-mapping>
私は<で助けが必要ですか? Product.hbm.xmlファイルの>部分。
--EDIT--
最終的に、私は私の製品モデルを取り戻すためのロード()メソッドを呼び出すことができるようにしたいです。
Configuration cfg = new Configuration();
...
ISessionFactory sf = cfg.BuildSessionFactory();
using (ISession s = sf.OpenSession())
{
Product product = s.Load<Product>(100);
foreach(Service service in product.Services)
{
Console.WriteLine(service.Name);
}
}
出力は次のようになります。
Option 2
Option 4
私の目標は、データベースからProductオブジェクトを返すためにISession.Load()メソッドを呼び出せるようにすることです。この製品は、データベースフィールドの整数値に基づいて選択されたリスト内のサービスのみを保持します。私はあなたの答えがそこに私を得ることができる方法を見ていない。 – DanHarrigan