Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2014, 16:44   #1
Лета
Пользователь
 
Регистрация: 10.06.2012
Сообщений: 44
По умолчанию xml-mapping NHibernate

Есть три таблицы - табл. Почтовый код связана многое к одному с табл. Город, которая связана многое к одному с табл. Страна. Соответственно есть три класса. В классе Страна есть List из городов, а в классе город - лист из обьектов класса почтовый код. Использую xml-mapping. Как нужно замапить эти связи между таблицами, чтобы при сохранении обьекта страна, сохранялись и города из List<City> этой страны, а для каждого города - почтовые коды?
Лета вне форума Ответить с цитированием
Старый 12.03.2014, 16:58   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

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

Для страны что-то вроде этого получится:
Код:
<bag cascade="all" inverse="true" lazy="true" name="Cities" table="Cities">
            <key column="CountryId" />
            <one-to-many class="SomeNS.City, YourEntitiesAssembly" />
        </bag>
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 12.03.2014, 18:01   #3
Лета
Пользователь
 
Регистрация: 10.06.2012
Сообщений: 44
По умолчанию

Спасибо большое! Теперь города, и адреса вставляются в базу при сохранении страны.
Только в табл. город поля CountryID для этих городов - null, а в табл. адреса - CityID - null.

Последний раз редактировалось Лета; 12.03.2014 в 18:07.
Лета вне форума Ответить с цитированием
Старый 12.03.2014, 20:51   #4
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

CountryID и CityID в файлах маппингов города и адреса замаплены? Если нет, то надо замапить. Если да, то перед сохранением следует проставить в городах и адресах значения Country и City.

Типа того:
Код:
            foreach (City city in country.Cities)
                city.Country = country;
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 12.03.2014, 22:43   #5
Лета
Пользователь
 
Регистрация: 10.06.2012
Сообщений: 44
По умолчанию

__________

Последний раз редактировалось Лета; 12.03.2014 в 22:50.
Лета вне форума Ответить с цитированием
Старый 12.03.2014, 22:47   #6
Лета
Пользователь
 
Регистрация: 10.06.2012
Сообщений: 44
По умолчанию

В классе город есть ссылка на страну, а в адресе - на город. Все связи замаплены. Вот так замаплены связи для города:
Код:
<many-to-one name="Country" class="Country" column="CountryID" />
    <bag cascade="all" inverse="true" lazy="true" name="PostalCodes" table="PostalCode">
      <key column="CityID" />
      <one-to-many class="PostalCode" />
    </bag>
А при сохранении страны, - заполняю лист из городов, а для каждого города - лист из адресов.
Лета вне форума Ответить с цитированием
Старый 12.03.2014, 23:51   #7
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Код:
при сохранении страны, - заполняю лист из городов
А в городах страну явно указываете? Если при сохранении у города значение свойства Country будет null, то и в БД запишется null, несмотря на то, что в коллекции Cities у страны этот город есть
см. пример кода из моего предыдущего поста
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 13.03.2014, 11:23   #8
Лета
Пользователь
 
Регистрация: 10.06.2012
Сообщений: 44
По умолчанию

Заработало!))) Большое спасибо!
Так же по-идее должно быстрее работать, чем если бы каждый объект - страну, города, адреса, сохраняли по-очереди?
Просто в программе в базу заносится большое количество записей, и она прилично так из-за этого подвисает. Может, есть еще какие-нибудь способы ускорить сохрание обьектов в базе?
Лета вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
File Mapping lowercase Win Api 12 17.04.2013 15:13
Подключение к Interbase через NHibernate Axilees Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 1 15.03.2012 08:09
Nhibernate nats Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 1 01.04.2011 11:10
File Mapping Gambler Win Api 1 13.08.2010 11:40
Свой PORT MAPPING (NAT) exploys Работа с сетью в Delphi 0 05.06.2010 01:24