powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate: один-ко-многим, PersistentGenericSet, NullReferenceException
10 сообщений из 10, страница 1 из 1
NHibernate: один-ко-многим, PersistentGenericSet, NullReferenceException
    #37849300
islanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Товарищи, уже затер гугл до дыр, но не нашел решения своей проблемы. Есть у меня такая картина:

Код: c#
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.
30.
31.
	
public partial class A : EntityBase
{
	public A()
	{
		Bs = new Iesi.Collections.Generic.HashedSet<B>();
	}
	public virtual Iesi.Collections.Generic.ISet<B> Bs
	{
		get;
		set;
	}
}
	
public class AMapping
{
	HasMany(x => x.Bs)
		.KeyColumns.Add("A_id", "A_tid")
		.Inverse()
		.Fetch.Select()
		.AsSet();
}
	
public class BMapping()
{
	References(x => x.A)
		.Class(typeof(A))
		.Not.Nullable()
		.Columns("A_id", "A_tid")
		.Fetch.Select();
}



В случае, когда коллекция B не пустая - все замечательно. НО когда записей нет, то я получаю объект типа NHibernate.Collection.Generic.PersistentGenericSet<B>, причем с неинициализированными полями, т.е. .Count выдает мне NullReferenceException, но A.Bs != null. Подскажите, пожалуйста, как с таким бороться.
...
Рейтинг: 0 / 0
NHibernate: один-ко-многим, PersistentGenericSet, NullReferenceException
    #37849803
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
islanov,

как-то не верится. Код покажите, где случается NRE. Может у вас NRE на чём-то другом падает?
...
Рейтинг: 0 / 0
NHibernate: один-ко-многим, PersistentGenericSet, NullReferenceException
    #37850654
islanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SolYUtor,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Ошибка источника: 


Строка 74:                 if (doc_.IATDOCVOLs != null)
Строка 75:                 {
Строка 76:                     if (!doc_.IATDOCVOLs.IsEmpty)
Строка 77:                     {
Строка 78:                           ;

Исходный файл: ...\Controllers\HomeController.cs    Строка: 76 

NullReferenceException: В экземпляре объекта не задана ссылка на объект.]
   NHibernate.Collection.PersistentSet.get_IsEmpty() in c:\Users\oskar.berggren\Documents\Projects\nhibernate-core-3\src\NHibernate\Collection\PersistentSet.cs:567
...
Рейтинг: 0 / 0
NHibernate: один-ко-многим, PersistentGenericSet, NullReferenceException
    #37850770
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
islanov,

Полный стектрейс? Многопоточность в ходу?
...
Рейтинг: 0 / 0
NHibernate: один-ко-многим, PersistentGenericSet, NullReferenceException
    #37850781
islanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SolYUtor,

Никакой много поточности.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
[NullReferenceException: В экземпляре объекта не задана ссылка на объект.]
   NHibernate.Collection.PersistentSet.get_IsEmpty() in c:\Users\oskar.berggren\Documents\Projects\nhibernate-core-3\src\NHibernate\Collection\PersistentSet.cs:567
   IATAdm.Controllers.HomeController.Index() in c:\users\rislanov\documents\visual studio 2010\Projects\IATAdm\IATAdm\Controllers\HomeController.cs:30
   lambda_method(ExecutionScope , ControllerBase , Object[] ) +74
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +178
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +24
   System.Web.Mvc.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a() +52
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +254
   System.Web.Mvc.<>c__DisplayClassf.<InvokeActionMethodWithFilters>b__c() +19
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +192
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +314
   System.Web.Mvc.Controller.ExecuteCore() +105
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +39
   System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +7
   System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__4() +34
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
   System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +59
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +44
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +7
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8690318
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155




Я так понимаю, что в NHibernate.Collection.PersistedSet.Set = null . Соответственно NRE при:

Код: c#
1.
2.
3.
4.
5.
	
public int Count
{
	get { return ReadSize() ? CachedSize : set.Count; }
}



Попробовал .Not.LazyLoad(), но не помогло
...
Рейтинг: 0 / 0
NHibernate: один-ко-многим, PersistentGenericSet, NullReferenceException
    #37850850
islanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
NHibernate: один-ко-многим, PersistentGenericSet, NullReferenceException
    #37850966
Deza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
islanov


ааа русская студия, чур чур:)
...
Рейтинг: 0 / 0
NHibernate: один-ко-многим, PersistentGenericSet, NullReferenceException
    #37850967
islanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deza,

Нет, ну по делу было бы лучше :)
...
Рейтинг: 0 / 0
NHibernate: один-ко-многим, PersistentGenericSet, NullReferenceException
    #37850973
Deza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
islanovDeza,

Нет, ну по делу было бы лучше :)

пока не приходилось работать с NHibernate, так что сказать нечего, кроме выше написанного:)
...
Рейтинг: 0 / 0
NHibernate: один-ко-многим, PersistentGenericSet, NullReferenceException
    #37855148
islanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Источник проблемы был локализован: переопределенные Equals() и GetHashCode(). В них у меня сравнивались/считались хэши всех 40+ полей. Оставил только такой вариант:

Код: c#
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.
		
public override bool Equals(object obj)
{
	if (ReferenceEquals(this, obj))
		return true;
		
	return Equals(obj as IATDOCVOL);
}

public virtual bool Equals(IATDOCVOL obj)
{
	if (obj == null) return false;

	if (Equals(id, obj.id) == false) return false;
	if (Equals(tid, obj.tid) == false) return false;

	return true;
}

public override int GetHashCode()
{
	int result = 1;

	result = (result * 397) ^ id.GetHashCode();
	result = (result * 397) ^ tid.GetHashCode();

	return result;
}



Где id - Guid, tid - integer.

В связи с этим 2 вопроса:
1. Могут ли возникнуть какие-то проблемы при сравнении объектов из-за отсутствия сравнения/хэша остальных полей? Я так понял что это как-то связанно с сессиями.
2. В каких случаях необходимо плодить множество сессий NHibernate или можно обойтись одной?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate: один-ко-многим, PersistentGenericSet, NullReferenceException
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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