У меня есть простое приложение, которое использует sqlite db в моем слое данных, ничего особенного. Я заполнил несколько записей для тестирования пользовательского интерфейса, но я не могу вернуть данные вообще.
Дело в том, что мои мои модульные тесты способны CRUD в обязательном порядке, но я обеспокоен тем, что что-то не так, когда я просто хочу выбрать все записи из таблицы, например, для заполнения сетки.
Впервые за долгое время я использую NHibernate, поэтому не могу сказать, это проблема с настройкой или что-то еще.
Базовый метод выбора:
protected IList<T> SelectMultipleInternalALL()
{
// create session and select.
using (ISession session = NBHelper.OpenSession())
return session.CreateCriteria<T>().List<T>();
}
Класс помощника:
public class NBHelper
{
private static ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
var configuration = new Configuration();
configuration.Configure();
configuration.AddAssembly(Assembly.GetCallingAssembly());
new SchemaExport(configuration).Execute(false, true, false);
_sessionFactory = configuration.BuildSessionFactory();
}
return _sessionFactory;
}
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}
Конфигурация таблицы:
<class name="UserData" table="User">
<id name="Id" type="System.Int32" column="Id" >
<generator class="native"/>
</id>
<property name="Email" />
<property name="FirstName" />
<property name="LastName" />
<property name="Notes" />
<property name="Favorite" type="boolean" />
<bag name="Addresses" inverse="true" cascade="all" generic="true">
<key column="UserId" />
<one-to-many class="AddressData"/>
</bag>
<bag name="Tags" inverse="true" cascade="all" generic="true">
<key column="WhatId" />
<one-to-many class="TagData"/>
</bag>
Конфигурация NHibernate:
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.SQLiteDriver</property>
<property name="connection.connection_string">
Data Source=C:\Documents and Settings\bryang\Desktop\AddressBook\AddressBook.DAL\addressbook.s3db
</property>
<property name="dialect">NHibernate.Dialect.SQLiteDialect</property>
<property name="query.substitutions">true=1;false=0</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
<property name="show_sql">true</property>
Местоположение базы данных полностью допустимо, но я не получаю никаких записей. Я думаю, что проблема может быть в вызове CreateCriteria (), но мои модульные тесты на 100% способны вставлять и считывать данные. Я что-то упускаю и не могу понять, что.
EDIT
Я также столкнулся с исключением из-за ленивых загрузок в отношениях «один ко многим». Я сделал столбцы коллекции lazy = "false", которые устранили ошибку. Побочным эффектом является то, что теперь я возвращаю данные везде, но это данные модульного тестирования откуда-то, и когда я открываю базу данных sqlite, я все еще вижу только, где был создан мой маленький набор данных. Где хранятся эти данные? Я не управляю своей ISession вручную, и я даже очищаюсь от простых вещей, таких как выбор. Откуда же эти данные?
В этот момент я возьму некоторые данные поверх одного, но для меня нет смысла, если в файле db, на который я смотрю, ничего нет. Спасибо,
Bryan