powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
25 сообщений из 69, страница 1 из 3
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36707378
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, коллеги!
Работать с NHibernate как-то трудновато. В стандартном ADO.NET я привык, что мои ошибки вылавливаются корректно - с указанием сути, и главное, - места, где я их допустил.
А вот при использовании NHibernate с этим проблемы. Получаю, например, ошибку "Индекс за пределами диапазона" и начинаю уродоваться - в каком же это классе я что-то упустил? Или не в описании, а в мэппинге? Или не в нем самом, а в связанном классе? Иногда ошибка вылезает при загрузке приложения (где я объявлял параметры сессии и т.п.). Тогда я не получаю даже вразумительного сообщения о проблеме...
На поиск подобных ошибок пока что уходит подавляющее время разработки :(
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36707453
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так никто лёгкой жизни с NHibernate и не обещал.
Может стоит наконец прочитать книжку, и вскурить документацию, дабы корректно писать маппинги и конфиг NHibernate?
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36707515
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtorТак никто лёгкой жизни с NHibernate и не обещал.
Может стоит наконец прочитать книжку, и вскурить документацию, дабы корректно писать маппинги и конфиг NHibernate?

Пока что имею на вооружении лишь книжку "Nhibernate in action".
Пишу на fluent-е, а для него литературы мало.
Многие примеры "компилирую" в вид, который мне кажется правильным.
Ошибки получаю в тривиальных случаях, на которых авторы "трудов" даже не заостряют внимание.
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36707525
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курдль,

прикрутите log4net
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36707576
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NHibernate in Action прочитать обязательно.
А чтобы не было ошибок, освойте ТDD. Тем более для Fluent NHibernate доступен инструментарий для тестирования сохраняемости.
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36708297
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Знаете, коллеги!
Пока исполняешь учебные примеры из горячо любимой Northwind, смотришь видеоуроки и читаешь книжки - вроде все шоколадно получается.
Как только садишься за реальный проект с не менее горячо любимым ораклом его ХП, рефлексивными и наследственными связями - становится как-то уныло :(
В общем, будь проклят тот день, когда я сел за баранку йэтого пылесоса!!! (с) ;)
Черт меня дернул дорабатывать старый проект на "современной платформе"...

Пойду прикручивать Log4Net.. В очередной раз (а то с первого раза он у меня как-то не прикрутился).
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36708555
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настройте маппинги NHibernate сами, это единственная рутинность. Забейте на автофлюенты и прочую муть, ручной мап даст б о льшую гибоксть. В остальном, с хибером работать очень приятно.
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36708666
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

Хехе Приятная рекомендация (новичку в этом деле.)мапить в ручную Northwind с хуетучами таблиц, связей и составных ключей.
Может вернуться к Афтор->Книжка? и там попробовать в рукопашную?
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36708718
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиХехе Приятная рекомендация (новичку в этом деле.)мапить в ручную Northwind с хуетучами таблиц, связей и составных ключей.
В чём сложность нарыть в гугле готовые маппинги под семпловую базу? Религия?
Где-то в степиМожет вернуться к Афтор->Книжка? и там попробовать в рукопашную?
А может включить моск и начать писать код? Каждый выбирает, что ему проще.
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36708775
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,
у меня нет особых шансов юзать автомаппинг, т.к. я делаю надстройку к существующей АС.
База данных в ней создана давно, но весьма корректно с точки зрения архитектуры и нотаций.
Как я понимаю, чтобы воспользоваться автомэппингом, надо придерживаться специальных соглашений по построению БД. Кстати - я глянул мельком на соглашения по именованию и припух - они катастрофически противоречат лучшим практикам построения БД! Напр, большинство промышленных CASE средств построения моделей БД требуют, чтобы коды полей были уникальными. А это значит, что поле ID в каждой сущности - не прокатит.
Видимо это хорошо для тех, кто "проектирует" БД вручную, типа "CRESTE TABLE ..."
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36708804
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курдль,

Дело в том, что NHibernate придумали любители DDD. Их представление о проектировании БД несколько отличается от традиционного data-centric подхода. И что-то я не припоминаю в прочитанных книгах по DDD даже упоминания о промышленных CASE-средствах проектирования БД.
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36708823
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КурдльНапр, большинство промышленных CASE средств построения моделей БД требуют, чтобы коды полей были уникальными. А это значит, что поле ID в каждой сущности - не прокатит.
Видимо это хорошо для тех, кто "проектирует" БД вручную, типа "CRESTE TABLE ..."
Да глупости это всё. У меня все таблицы имеют название "ID" и всё крутится на хибере. Никаких проблем тут нет. Ровно и наоборот. Называйте поля как хотите, автомапу всё-равно.
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36708865
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtor,
я не вижу пока четко, откуда выросли ноги. DDD или TDD...
Тут больше борьбы между приверженцами ООП и теми, кто не видит в нем панацею (как я).
Самые ярые из первых вообще бы отменили реляционную модель за ненадобностью. Их мечта - безупречные персистентные объекты. А нынешняя суета вокруг ORM - это только средство их воплощения.
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36709088
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиКурдль,

прикрутите log4net

Раньше я его недооценил!
В этот раз он тоже, правда, не сильно помог.
Выдал перед ошибкой SQL запрос без изъяна... Зато сравнив мэржилкой лог с ошибкой и лог без ошибки + немного танцев с бубном = вычислил, что в мэппинге поле указано дважды - в теле мэппинга и в reference. Когда убрал из тела - ошибка исчезла, отображаться объекты стали корректно и записываться в БД - тоже. Только перестали работать комбобоксы в представлениях :(
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36709171
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курдль,

вот некоторые пуанты для танцев, могут где-то помочь
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 ISessionFactory sessionFactory = new Configuration().Configure().BuildSessionFactory();
                ISession ses = sessionFactory.OpenSession(); 
                IDictionary Metadata = sessionFactory.GetAllClassMetadata();
                foreach (DictionaryEntry entry in Metadata)
                {
                    Type type = (Type)entry.Key;
                    try
                    {
                        //тут можно сделать  свою проверку
                     var result=   ses.CreateCriteria(type).SetMaxResults(1).List();
                    }
                    catch (Exception ex)
                    {
                        throw new Exception(string.Format("Ошибка в сущности {0}", type.FullName));
                    }
                }
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36709203
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,


Не удалось привести тип объекта "NHibernate.Util.UnmodifiableDictionary`2[System.String,NHibernate.Metadata.IClassMetadata]" к типу "System.Collections.IDictionary".


Попробую все же прикрутить.
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36709226
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

У меня получилось что-то типа:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
            ISession ses = sessionFactory.OpenSession();
            IDictionary<string, NHibernate.Metadata.IClassMetadata> Metadata = sessionFactory.GetAllClassMetadata();
            foreach (KeyValuePair<string, NHibernate.Metadata.IClassMetadata> entry in Metadata)
            {
                Type type = entry.GetType();
                try
                {
                    //тут можно сделать  свою проверку
                    var result = ses.CreateCriteria(type).SetMaxResults(1).List();
                }
                catch (Exception ex)
                {
                    throw new Exception(string.Format("Ошибка в сущности {0}: {1}", type.FullName, ex));
                }
            }
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36709264
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курдль,

Это скорее из за версионости NH1.2 and NH 2.1
надо было попробовать простой cast
(IDictionary)sessionFactory.GetAllClassMetadata();
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36709506
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

Простой cast и вызвал упомянутую мной ошибку.

Но главный вывод для меня из всей темы: "Нельзя мапить поля дважды - собственно в маппинге полей и потом в маппинге связей".
Теперь не могу понять, как в ASP.NET MVC использовать списки выбора - незамапленные ключевые поля не обрабатываются корректно.

Например, приведенная ниже конструкция больше не работает
Код: plaintext
1.
                <%= Html.DropDownList("STATUS_ID", (IEnumerable<SelectListItem>)ViewData["Statuses"], new { @style = "width: 420px;" })%>
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36709562
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курдль,

Честно сказать не могу понять, что такое не замапленные ключевые поля, ключ
должен быть..
вот почитайте, вроде толковый перевод
тынц
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36709849
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

Объясню на еще более простом примере. (Первоисточник: http://slynetblog.blogspot.com/2009/10/nhibernate.html )
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
public class ProductMap : ClassMap<Product>  
{
      public ProductMap()
      {
         Table("Products");
         Id(x => x.Id).GeneratedBy.Native();
         Map(x => x.Description);
         Map(x => x.Name);
         Map(x => x.Price);
         HasMany(x => x.Orders)     
                      .KeyColumn("ProductId")     
                      .Inverse() 
                      .Cascade.AllDeleteOrphan();
      }
  }


  public class OrderMap:ClassMap<Order>
  {
       public OrderMap()
       {
         Table("Orders");
         Id(x => x.Id).GeneratedBy.Native();
         Map(x => x.NumberOfItems);
//         Map(x => x.ProductId);  поле ProductId добавлено в это место мной
         Map(x => x.Customer);
         References(x => x.Product, "ProductId");   // поле ProductId в первоисточниках мапится только здесь
       }
  }

Закомментированная строка добавлена мной, хотя в первоисточниках поля, являющиеся внешними ключами, мапится только в References.
Смотрим, что выдает метод _session.Get<Order>(Id):
Id = 777
NumberOfItems = 88
Customer = 55
ProductId = null
- это мне не подходит

Если раскомментировать Map(x => x.ProductId):
Id = 777
NumberOfItems = 88
Customer = 55
ProductId = 44
- получаю проблемы при update (Index was out of range).
Сейчас с ними пытаюсь разобраться.
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36709864
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем маппить ProductId? Зачем вам этот Id вообще надо? Если сильно хочется то вызвать Order.Product.Id что мешает?

КурдльГде-то в степи,
- получаю проблемы при update (Index was out of range).
Сейчас с ними пытаюсь разобраться.

Стек в студию.
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36709911
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtor,

Моя проблема в том, что я впрягся сразу в 2 малознакомых для меня направления - вэб и ORM.
И пока у меня больше вопросов, чем ответов. Некоторые я откладываю на будущее.
В данный конкретный момент меня шибко волнует, как заставить работать визуальный компонент Html.DropDownList ( http://sql.ru/forum/actualpost.aspx?bid=12&tid=769811&mid=9006997&p=1#9006100), не имея упомянутого Вами "ProductId" (в моем случае STATUS_ID).
И, согласитесь, - как-то не кошерно иметь персистентный объект, в котором не все поля получают значения из БД, когда Вы этого ожидали...
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36709924
sysaux
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курдль,

А почему именно NHibernate? Одно дело, если есть опыт разработки на Java - тогда есть резоны не отказываться от привычных средств. Если же такового нет - чем голый ADO.NET с LINQ не устраивает? Про ADO EF молчу - сам не пользовал.
...
Рейтинг: 0 / 0
Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
    #36709935
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysauxКурдль,

А почему именно NHibernate? Одно дело, если есть опыт разработки на Java - тогда есть резоны не отказываться от привычных средств. Если же такового нет - чем голый ADO.NET с LINQ не устраивает? Про ADO EF молчу - сам не пользовал.

Да, конечно, уроки и примеры по ASP.NET MVC пройдены с LINQ-ом. Посматривал и на EF...
Но есть одна маленькая проблема, под названием oracle!
Раньше MS стеснялся выпускать продукты, не поддерживающие его...
...
Рейтинг: 0 / 0
25 сообщений из 69, страница 1 из 3
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как отлаживать приложения с NHibernate? Как определять место и смысл ошибок?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]