1

複合 ID を持つテーブルを持つ MS SQL データベースがあります。

これは私のxml構成ファイルです:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="SimpleMapping.Domain"
namespace="SimpleMapping.Domain">
  <class name="TabMaster" table="TabMaster">
    <composite-id class="TabMasterCompositeKey">
      <key-property column="Configuration" name="Configuration" type="AnsiString" />
      <key-property column="ResolutionType" name="ResolutionType" type="int" />
    </composite-id>
    <property name="Description" column="Description" type="AnsiString" />
    <property name="Title" column="Title" type="AnsiString" />
    <property name="IdResolutionFileDes" column="idResolutionFileDes" type="AnsiString" />
    <property name="WorkflowType" column="WorkflowType" type="AnsiString" />
    <property name="ViewAllStep" column="ViewAllStep" type="AnsiString" />
    <property name="ManagedData" column="ManagedData" type="AnsiString" />
  </class>
</hibernate-mapping>

マッピング オブジェクトを作成しました。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SimpleMapping.Domain
{
    public class TabMaster
    {
        public virtual string Configuration { get; set; }
        public virtual int ResolutionType { get; set; }
        public virtual string Description { get; set; }
        public virtual string Title { get; set; }
        public virtual string IdResolutionFileDes { get; set; }
        public virtual string WorkflowType { get; set; }
        public virtual string ViewAllStep { get; set; }
        public virtual string ManagedData { get; set; }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SimpleMapping.Domain
{
    class TabMasterCompositeKey
    {
        public virtual string Configuration { get; set; }
        public virtual int ResolutionType { get; set; }
        public override bool Equals(object obj)
        {
            TabMasterCompositeKey compareTo = (TabMasterCompositeKey)obj;
            return (this.Configuration == compareTo.Configuration) && (this.ResolutionType == compareTo.ResolutionType);
        }
        public override int GetHashCode()
        {
            return this.ToString().GetHashCode();
        }
        public override string ToString()
        {
            return Configuration.ToString() + "/" + ResolutionType.ToString();
        }
    }
}

私の Main() では、テーブル内の要素をリストしようとしています:

namespace SimpleMapping.Console
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using NHibernate;
    using NHibernate.Cfg;
    using SimpleMapping.Domain;

    class Program
    {
        static void Main(string[] args)
        {
            ISessionFactory sessionFactory = new Configuration().Configure().BuildSessionFactory();

            using (ISession session = sessionFactory.OpenSession())
            {
                using (ITransaction tx = session.BeginTransaction())
                {

                    IQuery query = session.CreateQuery("from TabMaster");

                    foreach (TabMaster tm in query.List<TabMaster>())
                        System.Console.WriteLine(string.Format("ID: {0}\nConfiguration: {1}\nManagedData: {2}\n", tm.Configuration, tm.Description, tm.ManagedData));

                    tx.Commit();
                    session.Close();
                }
            }

            System.Console.ReadKey();
        }
    }
}

キーではないパラメータが表示されます。そのため、Description と ManagedData は表示されますが、tm.Configuration は表示されません。スタックでは、すべてのレコードで Null に設定されています。

どうしたの?

これは、composite-id ルール (?) に関連していると思います。

お返事ありがとうございます!

4

1 に答える 1

0

複合キーに次の名前を付ける必要があります。

<composite-id class="TabMasterCompositeKey" name="TheKey">
      <key-property column="Configuration" name="Configuration" type="AnsiString" />
      <key-property column="ResolutionType" name="ResolutionType" type="int" />
    </composite-id>

TabMaster エンティティにプロパティを配置します。

public class TabMaster
    {
        public virtual TabMasterCompositeKey TheKey { get; set; }

        public virtual string Description { get; set; }
        public virtual string Title { get; set; }
        public virtual string IdResolutionFileDes { get; set; }
        public virtual string WorkflowType { get; set; }
        public virtual string ViewAllStep { get; set; }
        public virtual string ManagedData { get; set; }
    }

これにより、エンティティの単一のキー プロパティを確認できます。

于 2011-07-29T15:42:44.660 に答える