powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Коллекция <map/>. Не могу понять смысл аттрибута <index-many-to-many/>.
11 сообщений из 11, страница 1 из 1
Коллекция <map/>. Не могу понять смысл аттрибута <index-many-to-many/>.
    #38301745
vitach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть маппинг файл. Пытаюсь в нем разобраться что к чему. С коллекцией что-то не ладное творится, не все значения по запросу из БД выходят. Структура такая:

Код: xml
1.
2.
3.
4.
5.
<map name="Name" inverse="true">
	<key column="FirstID" />
	<index-many-to-many column="OtherID" class="OtherClass" />
	<one-to-many class="AnotherClass" />
</map>



Вообще вопросов несколько. Не хватает знаний то ли в коллекциях, то ли еще в чем. Не могу понять зачем нужны индексы. Т.е. index-many-to-many с левой сущностью в структуре. Ускоряет поиск? Насколько я понимаю, map должен содержать в себе ключ (FirstID) и значение (AnotherClass). Шо за индексы тут появились не понимаю. Читал маннуал по хибернейту и по nhibernate, но там настолько сухо все написано... inverse="true" - что за зверь еще интересует..
...
Рейтинг: 0 / 0
Коллекция <map/>. Не могу понять смысл аттрибута <index-many-to-many/>.
    #38301855
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitach,

index-many-to-many - подробнее читайте у Ayende .
Inverse показывает, по какой стороне двусторонней ассоциации хибер будет определять живучесть ассоциации. Позволяет избежать лишнего update при сохранении сущности.
...
Рейтинг: 0 / 0
Коллекция <map/>. Не могу понять смысл аттрибута <index-many-to-many/>.
    #38311243
vitach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем проблема там с хешированием Iesi.Collections.SortedSet. Алгоритм хеширования от Iesi считает хэш как-то по-своему и не все элементы выдергиваются из базы. Попробовал заменить на стандартный HashSet от System.Collections он работает нормально, но теперь при добавлении значений в коллекцию не обновляется число элементов, транзакции находятся внутри BeginTransaction() и transaction.Commit. Грешу на то что для работы хибера нужен все-таки Iesi. Как решить проблему с хешированием?
...
Рейтинг: 0 / 0
Коллекция <map/>. Не могу понять смысл аттрибута <index-many-to-many/>.
    #38311333
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitach,

как переопределили Equals() и GetHashCode()?
...
Рейтинг: 0 / 0
Коллекция <map/>. Не могу понять смысл аттрибута <index-many-to-many/>.
    #38312694
vitach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SolYUtor,
Не переопределял ничего... В классе есть свойство:
Код: c#
1.
private IDictionary<CurriculumSubject, SubjectCourse> subjectCourses;


И функция:
Код: c#
1.
2.
3.
4.
public virtual IEnumerable<SubjectCourse> GetSubjectCourses() 
{
	return new SortedSet<SubjectCourse>(subjectCourses.Values, new SubjectCourseSorter());
}


Я функцию заменил на:
Код: c#
1.
2.
3.
4.
public virtual HashSet<SubjectCourse> GetSubjectCourses() 
{
	return new HashSet<SubjectCourse>(subjectCourses.Values);
}
...
Рейтинг: 0 / 0
Коллекция <map/>. Не могу понять смысл аттрибута <index-many-to-many/>.
    #38312722
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitachНе переопределял ничего... В классе есть свойство:
Это и есть ошибка. Чтобы словари и хеш-сеты работали правильно, вы должны переопределять Equals и GetHashCode. Рекомендую посмотреть, как это сделано здесь .
...
Рейтинг: 0 / 0
Коллекция <map/>. Не могу понять смысл аттрибута <index-many-to-many/>.
    #38312737
vitach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SolYUtor,

Спасибо, будем разбираться :)
...
Рейтинг: 0 / 0
Коллекция <map/>. Не могу понять смысл аттрибута <index-many-to-many/>.
    #38313947
vitach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SolYUtor,
Переопределил указанные функции. Хэш теперь правильно вычисляется. Но вот проблема одна осталась не понятная мне. Как я уже писал выше функция в классе выглядит так:
Код: c#
1.
2.
3.
4.
public virtual IEnumerable<SubjectCourse> GetSubjectCourses() 
{
	return new SortedSet<SubjectCourse>(subjectCourses.Values, new SubjectCourseSorter());
}



Соответственно SubjectCourseSorter вот такой:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class SubjectCourseSorter : IComparer<SubjectCourse> {

		public int Compare(SubjectCourse x, SubjectCourse y) {
			String[] code1 = x.Code.Split('.');
			String[] code2 = y.Code.Split('.');
			return int.Parse(code1[code1.Length-1])
				.CompareTo(int.Parse(code2[code2.Length-1]));
		}
	}


Code представляет собой строку типа "ОПД.Ф.20" и всегда заканчивается числом. Так вот если у элементов этот код одинаковый, то функция вставляет только один обьект в SortedSet из всех элементов с таким кодом. Если я возвращаю HashedSet вместо SortedSet, который тоже от Iesi, то все норм...
...
Рейтинг: 0 / 0
Коллекция <map/>. Не могу понять смысл аттрибута <index-many-to-many/>.
    #38314079
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitachCode представляет собой строку типа "ОПД.Ф.20"Учебный план второго поколения?
...
Рейтинг: 0 / 0
Коллекция <map/>. Не могу понять смысл аттрибута <index-many-to-many/>.
    #38314158
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitach,

vitachCode представляет собой строку типа "ОПД.Ф.20" и всегда заканчивается числом. Так вот если у элементов этот код одинаковый, то функция вставляет только один обьект в SortedSet из всех элементов с таким кодом. Если я возвращаю HashedSet вместо SortedSet, который тоже от Iesi, то все норм...
Set'ы - это коллекции уникальных элементов. Соответственно, если SubjectCourseSorter говорит что дав объекта равны, один из них будет выкинут как дубликат. Так что или дополняйте SubjectCourseSorter уникальностью для одного кода, или используйте другой Set. Для вашего метода я бы посоветовал ImmutableSet из Iesi.Collections.
...
Рейтинг: 0 / 0
Коллекция <map/>. Не могу понять смысл аттрибута <index-many-to-many/>.
    #38315343
vitach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy,
Типа того :)

SolYUtor,
Хмм.. А я думал что Sorter нужен чисто для сортировки..
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Коллекция <map/>. Не могу понять смысл аттрибута <index-many-to-many/>.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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