Свободный NHibernate не запрашивает базу данных правильно - PullRequest
0 голосов
/ 25 июля 2010

Я только что посмотрел, как подключить свое приложение к nhibernate (беглый nhibernate), но у меня возникло несколько трудностей ...

Я попытался проследить, что люди сделали, и обнаружил следующее:

public class NHibernateSessionPerRequest : IHttpModule
{
    private static readonly ISessionFactory _sessionFactory;

    static NHibernateSessionPerRequest()
    {
        _sessionFactory = CreateSessionFactory();
    }

    public void Init(HttpApplication context)
    {
        context.BeginRequest += BeginRequest;
        context.EndRequest += EndRequest;
    }

    public static ISession GetCurrentSession()
    {
        return _sessionFactory.GetCurrentSession();
    }

    public void Dispose() { }

    private static void BeginRequest(object sender, EventArgs e)
    {
        ISession session = _sessionFactory.OpenSession();
        session.BeginTransaction();
        CurrentSessionContext.Bind(session);
    }

    private static void EndRequest(object sender, EventArgs e)
    {
        ISession session = CurrentSessionContext.Unbind(_sessionFactory);

        if (session == null) return;

        try
        {
            session.Transaction.Commit();
        }
        catch (Exception)
        {
            session.Transaction.Rollback();
        }
        finally
        {
            session.Close();
            session.Dispose();
        }
    }

    private static ISessionFactory CreateSessionFactory()
    {
        string connString = "AV8MediaUser";

        FluentConfiguration configuration = Fluently.Configure()
        .Database(MsSqlConfiguration.MsSql2008.ShowSql().ConnectionString(
           x => x.FromConnectionStringWithKey(connString)))
        .ExposeConfiguration(
            c => c.SetProperty("current_session_context_class", "web"))
        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Category>());

        return configuration.BuildSessionFactory();
    }
}

Но когда я запускаю его, кажется, что он правильно подключается к базе данных, но не запускает запрос:

return Session.CreateCriteria<Category>()
            .List<Category>();

Я делаю что-то глупо неправильно?

Ответы [ 2 ]

0 голосов
/ 25 июля 2010

Понял ... я не осознавал, что мои отображения не были включены в проект по неизвестной причине ... но включил их снова, и все это хорошо!

Странно, как это не выдает ошибку, хотя.

0 голосов
/ 25 июля 2010

CreateCriteria ожидает, что вы зададите имя объекта модели, для которого вы хотите получить экземпляры. Похоже, вам не хватает названия типа вашего объекта модели. Попробуйте что-то вроде этого:

    List<YourModelObject> results = session.CreateCriteria<YourModelObject>()
        .List<YourModelObject>();

Чтобы увидеть, что на самом деле отправляется в базу данных, рассмотрите возможность использования NHProfiler от Ayende - это пригодится позже, когда вы увидите, что ваши более сложные критерии или HQL-запросы действительно приводят к ...

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