Где находятся HashedSet.cs & DictionarySet.cs из NHibernate/Iesi.Collections?
Вот моя основная ситуация. Я пытаюсь использовать NHibernate для получения информации из базы данных, создания некоторых объектов на основе сопоставлений, сериализации, их и перемещения сериализованного объекта во флэш-компонент. Ошибки сборки не исчезают, но когда я возвращаю "сериализованный" объект, он продолжает возвращать ноль. Вставив некоторые контрольные точки и пройдя через них, я понял, куда все идет на юг.
Я поставил точку останова здесь:
var tasks = (List<CSH_Task>)persistanceManager.RetrieveAll<CSH_Task>(SessionAction.BeginAndEnd);
И это входит в мой класс PersistanceManager, успешно передавая мой CSH_Task:
public IList<T> RetrieveAll<T>(SessionAction sessionAction)
{
/* Note that NHibernate guarantees that two object references will point to the
* same object only if the references are set in the same session. For example,
* Order #123 under the Customer object Able Inc and Order #123 in the Orders
* list will point to the same object only if we load Customers and Orders in
* the same session. If we load them in different sessions, then changes that
* we make to Able Inc's Order #123 will not be reflected in Order #123 in the
* Orders list, since the references point to different objects. That's why we
* maintain a session as a member variable, instead of as a local variable. */
// Open a new session if specified
if ((sessionAction == SessionAction.Begin) || (sessionAction == SessionAction.BeginAndEnd))
{
m_Session = m_SessionFactory.OpenSession();
}
// Retrieve all objects of the type passed in
ICriteria targetObjects = m_Session.CreateCriteria(typeof(T));
IList<T> itemList = targetObjects.List<T>();
// Close the session if specified
if ((sessionAction == SessionAction.End) || (sessionAction == SessionAction.BeginAndEnd))
{
m_Session.Close();
m_Session.Dispose();
}
// Set return value
return itemList;
}
Это прямо из более старого примера NHibernate(я чрезвычайно новичок в этом), и это приводит меня к странице "Нет доступных источников", где перечислены
Расположение стека вызовов:
Iesi.Collections.DLL! Iesi.Collections.Generic.HashedSet.HashedSet () Строка 18
Информация об исходном файле:
Поиск источника для 'd:\CSharp\NH\NH_Hg\nhibernate\src\Iesi.Collections\Generic\HashedSet.cs'. Контрольная сумма: MD5 {d3 1c 6c 95 94 c0 cb d4 b5 8d 8c 42 c5 4a 37 b2}
Файл 'd: \ CSharp \ NH \ NH_Hg \ nhibernate \ src \ Iesi.Collections \ Generic \ HashedSet.cs' не существует.
Поиск в документах сценария для 'd:\CSharp\NH\NH_Hg\nhibernate\src\Iesi.Collections\Generic\HashedSet.cs'...
Поиск в проектах для 'd:\CSharp\NH\NH_Hg\nhibernate\src\Iesi.Collections\Generic\HashedSet.cs'.
Файл не найден в проекте.
Поиск в каталоге 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\crt\src\'...
Поиск в каталоге 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\mfc\'...
Поиск в каталоге 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\atl\'...
Поиск в каталоге 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\'... Поиск в каталоге 'C:\Users\tackiean\Desktop\'...
Поиск в каталоге 'E:\SmartMC\NHibernate\Required_Bins\'...
Источник был найден в 'E:\SmartMC\NHibernate\Required_Bins\HashedSet.cs'.
Определение соответствия контрольной суммы для следующих местоположений:
1: E: \ SmartMC \ NHibernate \ Required_Bins \ HashedSet.cs Контрольная сумма: MD5 {40 1b 39 7e 8f 4a 3f 6 11 41 88 70 9e 8f 8 f1} Контрольная сумма не совпадает.
Параметры исходных файлов отладки для активного решения указывают, что отладчик не будет просить пользователя найти файл: d: \ CSharp \ NH \ NH_Hg \ nhibernate \ src \ Iesi.Collections \ Generic \ HashedSet.cs.
Отладчику не удалось найти исходный файл 'd:\CSharp\NH\NH_Hg\nhibernate\src\Iesi.Collections\Generic\HashedSet.cs'.
Если я продолжу шагать по нему, то вернусь к своему коду, а затем вернусь сюда с перечислением практически идентичного сообщения о DictionarySet.cs
Во-первых, я не тот, кто скачал NHibernate для этого проекта на этом компьютере, но я бы предположил, что если бы для его работы требовался HashedSet.cs/DictionarySet.cs, они были бы включены по умолчанию. Последние 7 часов я потратил сегодня на поиски ответа на этот вопрос, но уже пустую. Я никогда не видел такую ошибку раньше. Я думаю, что он просто ищет файл, который нужен NHibernate, и не может найти, но происходит ли что-то еще здесь? Любая помощь будет с благодарностью. Надеюсь это подходящее место / отформатировано разборчиво; Я никогда не задавал здесь вопросов, поэтому надеюсь, что это не совсем неуместно.
2 ответа
HashedSet и DictionarySet являются частью Iesi.Collections, библиотеки коллекций, включенной в NHibernate. Бинарный пакет NHibernate обычно включает в себя файлы.pdb, которые содержат отладочную информацию сборок. Когда отладчик хочет открыть исходные файлы, он не может найти их на вашем компьютере, потому что включенные пути к исходным файлам - это сопровождающие пакета.
Если вы хотите, вы можете скачать исходники NHibernate с GitHub и скомпилировать сборки самостоятельно. Затем отладчик автоматически найдет исходные файлы, когда возникнет исключение (не перемещайте исходные файлы после компиляции).
Вам следует немного изменить свой метод RetrieveAll, потому что вы всегда должны открывать сеанс и закрывать его где-нибудь. Обычно вы делаете что-то вроде:
using (ISession sess = factory.OpenSession())
using (ITransaction tx = sess.BeginTransaction())
{
try
{
var crit = sess.CreateCriteria<T>();
var list = crit.List<T>();
// Do something with list
tx.Commit();
}
catch (Exception)
{
tx.Rollback();
}
}
Если вы хотите вернуть запрашиваемый список вызывающей стороне, сеанс будет закрыт. Поэтому убедитесь, что в вашем запрошенном списке не осталось неинициализированных ленивых загрузочных прокси. Вы можете прочитать раздел о отложенной загрузке в документации NHibernate. Надеюсь, я могу немного помочь с твоей проблемой.
Сообщения, которые вы видите, являются вашим отладчиком, пытающимся найти исходный код, поскольку вы проходите через него. Отсутствие этого исходного кода на вашей машине не влияет на время выполнения NHibernate.