Как вернуть значение DataSet в nhibernate - PullRequest
0 голосов
/ 09 августа 2011

Я использую следующий код

, но получаю ошибку для возврата значения

public DataSet GetImageGroupId(int CaseId)
    {
        NHibernate.ISessionFactory sessionfactory = NHibernateHelper.GetSessionFactory();
        NHibernate.ISession session = sessionfactory.OpenSession();

        StringBuilder queryBuilder = new StringBuilder();

        queryBuilder.Append(string.Format("SELECT Id,Name,ImageModalityId from ImageGroup where BaseCaseId='" + CaseId + "'"));

        IQuery query = session.CreateSQLQuery(queryBuilder.ToString()).AddEntity(typeof(ImageGroup));

        return // how to return a dataset.

    }

Пожалуйста, помогите мне ..

Ответы [ 2 ]

2 голосов
/ 09 августа 2011

Рокки,

Я думаю, что вам не хватает цели Nhibernate, идея NHibernate состоит в том, чтобы сопоставить вашу базу данных с вашим доменным объектом, поэтому такой класс

public class ImageGroup
{
    public virtual int id { get; set; }
    public virtual String Name { get; set; }
    public virtual int ImageModalityId { get; set; }
    public virtual int BaseCaseId { get; set; }
}

ВыЗатем можно использовать файлы сопоставления в Nhibernate для выполнения следующих действий:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="NHibernateTest" assembly="NHibernateTest">
  <class name="ImageGroup" table="ImageGroup" lazy="false">
    <id name="id">
      <column name="id"/>
      <generator class="native"/>
    </id>
    <property name="Name">
      <column name="Name"/>
    </property>
    <property name="ImageModalityId">
      <column name="ImageModalityId"/>
    </property>
    <property name="BaseCaseId">
      <column name="BaseCaseId"/>
    </property>
  </class>
</hibernate-mapping>

и вызывать его таким способом

    public class Start
    {
         static ISessionFactory SessionFactory;

        public Start()
        {
            using (ISession session = OpenSession()) {

                {

                    ImageGroup imagegroup1 = session.Get<ImageGroup>(1);
                }

            }
    }
               static ISession OpenSession() {
            if (SessionFactory == null) //not threadsafe
                { //SessionFactories are expensive, create only once
                Configuration configuration = new Configuration();
                configuration.AddAssembly(Assembly.GetCallingAssembly());
                SessionFactory = configuration.BuildSessionFactory();
            }
            return SessionFactory.OpenSession();
        }
}

Я ссылаюсь на эту ссылку

Надеюсь, это поможет

0 голосов
/ 09 августа 2011

NHibernate предназначен для предоставления вам строго типизированных объектов, а не наборов данных / таблиц.Я бы предложил сопоставить результаты с объектом и, если возможно, позволить nhibernate получить их для вас.Если вам абсолютно необходим набор данных, вы можете подключиться к соответствующему соединению обычным способом ADO.net.

Примерно так должно работать на SQL Server (используя пространство имен SqlClient):

        using (var conn = session.Connection as SqlConnection)
        {
            conn.Open();
            var adapter = new SqlDataAdapter(string.Format("SELECT Id,Name,ImageModalityId from ImageGroup where BaseCaseId='{0}'", caseId), conn);
            var dataSet = new System.Data.DataSet();

            adapter.Fill(dataSet);

            return dataSet;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...