У меня есть база данных 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 для каждой записи.
В чем проблема?
Я думаю, это связано справило составного идентификатора (?)
Спасибо за ваш ответ!