Как получить доступ к представлению с помощью Fluent NHibernate? - PullRequest
1 голос
/ 07 февраля 2011

Мое веб-приложение использует полдюжины таблиц, каждая из которых заполняется, когда пользователь проходит через систему. Для анализа статистики я написал представление базы данных, чтобы свести эти таблицы в одно представление.

Представление работает, однако я хочу автоматизировать некоторые тесты для создания представления.

Моя идея сделать это состояла в том, чтобы создать модель / карту и репозиторий для вида - только с действием списка. Моя текущая реализация не работает.

Это мой репозиторий:

namespace FunctionalTests.SpssView
{
    public class SpssRepository
    {
        private readonly ISessionManager _sessionManager;

        public SpssRepository(ISessionManager sessionManager)
        {
            _sessionManager = sessionManager;
        }

        public IList<Spss> ListFromSpssView()
        {
            ICriteria criteria = _sessionManager.GetSession().CreateCriteria(typeof(Spss));
            return criteria.List<Spss>();
        }
    }
}

Это класс модели:

namespace FunctionalTests.SpssView
{
    public class Spss
    {
        public virtual String StudentId { get; set; }
        public virtual String UPNSCN { get; set; }
        ...
    }
}

И отображение:

namespace FunctionalTests.SpssView
{
    public sealed class SpssMap : ClassMap<Spss>
    {
        public SpssMap()
        {
            Id(x => x.StudentId).GeneratedBy.Assigned();
            Map(x => x.UPNSCN);
            ...
        }
    }
}

Я не совсем уверен в отображении идентификатора - как это только читается из вида?

Это мой тест:

    [Test]
    public void ShouldPopulateAndRetrieveFromSpssView()
    {   
        var mockSessionManager = new Mock<ISessionManager>();
        mockSessionManager.Setup(x => x.GetSession()).Returns(_session);

        var caseRepository = new CaseRepository(mockSessionManager.Object);
        var caseList = caseRepository.ListCases();
        Assert.That(caseList.Count, Is.EqualTo(2));

        var repository = new SpssRepository(mockSessionManager.Object);

        var spssList = repository.ListFromSpssView();

        Assert.That(spssList.Count, Is.EqualTo(2));
    }   

Обратите внимание на код списка дел - я поместил его туда, чтобы убедиться, что соединение с БД было установлено. Эта часть теста проходит.

Запуск выбора * из spss; возвращает два результата. (Я использую sql server 2005 fwiw)

И поскольку это не рабочий код, я создал новую папку в своем проекте Visual Studio FunctionalTests (я упоминаю об этом, поскольку мне кажется, что это одно из главных отличий между этим и моими рабочими репозиториями.) сделать разницу?

Можно ли проверить подобные виды? Есть ли в любом случае я вижу sql, который генерируется? Что я делаю не так ??!?

Спасибо:)

1 Ответ

2 голосов
/ 07 февраля 2011

Попробуйте добавить:

    public SpssMap()
    {
       Table("myViewBame"); // ADD THIS
        Id(x => x.StudentId).GeneratedBy.Assigned();
        Map(x => x.UPNSCN);
        ...
    }

Чтобы увидеть сгенерированный SQL, добавьте:

.ShowSql()

Например:

Fluently.Configure().Database(
                        MsSqlConfiguration.MsSql2005
                            .ConnectionString(
                                ConfigurationManager.ConnectionStrings["my"].ConnectionString).ShowSql())
                        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<MyClass>())
                        .BuildSessionFactory();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...