AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.12.2016, 12:20   #1  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,249 / 3064 (143) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Как соотносятся AX Data Entity и Entity framework?
DAX dataentity: https://ax.help.dynamics.com/en/wiki...ies-home-page/
Entity framework: https://msdn.microsoft.com/en-us/lib...v=vs.113).aspx
+ https://ru.wikipedia.org/wiki/ADO.NET_Entity_Framework
+ http://metanit.com/sharp/entityframework/

У меня есть несколько соображений, но я, пожалуй, воздержусь пока.
Вдруг кто-нибудь скажет неожиданное.

основной вопрос:
Как соотносятся AX Data Entity и Entity framework?

дополнительный вопрос:
правильно ли я понимаю, что аксапта и EF точно используют один и тот же диалект oData для общения друг с другом?
есть ли другие совместные отношения?
Старый 29.12.2016, 14:39   #2  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
493 / 246 (9) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Цитата:
Сообщение от mazzy Посмотреть сообщение
основной вопрос:
Как соотносятся AX Data Entity и Entity framework?
Entity framework - некий фрейворк с помощью которого можно прицепится к SQL и при этом не надо сами SQL запросы писать или думать про схему DB.
Например через LinqPad можно написать запрос и EF сам разбертся кого с кем join и что select.

AX Data Entity - посути SQL вьюхи доступные через oData и с вкраплениями безнес логики.

Как соотносятся?
Если надо доступ к SQL table/view вывести через oData обычно используют EF. Основное преимущество - простота.
Конечный результат будет очень похож на AX Data Entity. Минус auth, бизнес логика. Плюс больше возможностей, например в AX Data Entity больше 1000 записей не выбирает.

Цитата:
дополнительный вопрос:
правильно ли я понимаю, что аксапта и EF точно используют один и тот же диалект oData для общения друг с другом?
есть ли другие совместные отношения?
Если делать oData с EF, то получится webApi проект с кучей настроек. В браузере это будет ооочень похоже на AX oData, но могут быть нюансы.

Если сравнивать AX с oData v4, то AX не поддерживает стандартный contains и подменяет его самодельным eq '*searchTxt*'. Непонятно зачем так, но видимо есть и другие отличия.
dynamics-ax-7-services-technical-concepts-guide
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
За это сообщение автора поблагодарили: mazzy (10).
Старый 29.12.2016, 14:59   #3  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,249 / 3064 (143) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
например в AX Data Entity больше 1000 записей не выбирает.
(оО)
это на практике раскопано или где-то написано?

Цитата:
Сообщение от Alex_KD Посмотреть сообщение
Если делать oData с EF, то получится webApi проект с кучей настроек. В браузере это будет ооочень похоже на AX oData, но могут быть нюансы.
собственно отсюда и вопрос

смотри, данные из data entity публикуются автоматом
https://ax.help.dynamics.com/en/wiki...-7/#addressing

если опустить вопросы авторизации,
то можно ли предположить, что в аксаптовские data entity заранее заложена возможность работать с аксаптой из отдельно написанных маленьких приложений, которые используют Entity Framework?

другими словами, аксаптовские формы и MorphX стал бы не нужен.


Цитата:
Сообщение от Alex_KD Посмотреть сообщение
Если сравнивать AX с oData v4, то AX не поддерживает стандартный contains и подменяет его самодельным eq '*searchTxt*'. Непонятно зачем так, но видимо есть и другие отличия.
dynamics-ax-7-services-technical-concepts-guide
Я вот тоже смотрю и вижу, что они не совсем совпадают.
и тоже не понимаю почему.

можно ли предположить, что реализована возможность по стандартам предыдущих версий EF?
Старый 29.12.2016, 16:25   #4  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
493 / 246 (9) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Цитата:
Сообщение от mazzy Посмотреть сообщение
(оО)
это на практике раскопано или где-то написано?
По ссылке что я привел выше - "Server-driven paging - The maximum page size that is served is 1,000.". Вроде еще тикет на connect есть где народ жалуется )

Цитата:
собственно отсюда и вопрос

смотри, данные из data entity публикуются автоматом
https://ax.help.dynamics.com/en/wiki...-7/#addressing
Веб сервисы тоже публикуются автоматом. Это приемущеста архитектуры новой AX, нежели связь с EF.

Цитата:
если опустить вопросы авторизации,
то можно ли предположить, что в аксаптовские data entity заранее заложена возможность работать с аксаптой из отдельно написанных маленьких приложений, которые используют Entity Framework?

другими словами, аксаптовские формы и MorphX стал бы не нужен.
Ага, я вижу куда ты клонишь.

Представь если в AX данный можно изменить только через Data Entity. Клево, а?
Написал логику 1 раз и пользуешь ее везде - начальные данные, миграция, стороние вендоры-интеграции, формочки, отчеты.

Цитата:
можно ли предположить, что реализована возможность по стандартам предыдущих версий EF?
Для AX Data Entity куча dll на AOS, мне кажется написали все с нуля.

Повторю еще раз, EF и oData это не одно и тоже. С одной и той же версией EF можно сделать разные oData с разным поведением.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 29.12.2016, 17:53   #5  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,249 / 3064 (143) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
Представь если в AX данный можно изменить только через Data Entity. Клево, а?
Дык, и я про то.
И никаких проблем с RecID, никаких идиотских структур типа DirParty.
Вместо понятия Relations - понятие Принадлежит.
Ляпота. Программистская.

Чего ж реализация то такая странная?

Цитата:
Сообщение от Alex_KD Посмотреть сообщение
Повторю еще раз, EF и oData это не одно и тоже. С одной и той же версией EF можно сделать разные oData с разным поведением.
Дык, я и не спорю. Не одно и тоже.
И как раз предлагаю обсудить - а почему собственно?
Какие могут быть рациональные причины для изобретения собственного велосипеда в Аксапте?
Понятно, что "как всегда"... Но вдруг таки можно найти рациональное зерно?
Старый 29.12.2016, 17:58   #6  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,249 / 3064 (143) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
По ссылке что я привел выше - "Server-driven paging - The maximum page size that is served is 1,000.".
Не-не-не-не.
это артефакт odata. http://www.odata.org/getting-started/basic-tutorial/
обрати внимание на тег "@odata.nextLink"

насколько я понимаю, по стандарту oData ответ дается порциями.
в ответе будет ссылка на следующую порцию, если она есть.

и размер страницы - это размер порции.
разве не так?
Миниатюры
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 2
Размер:	38.2 Кб
ID:	11123  
Старый 29.12.2016, 18:43   #7  
belugin is offline
belugin
Участник
Аватар для belugin
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
Сотрудники Microsoft Dynamics
 
3,755 / 1852 (69) ++++++++
Регистрация: 16.01.2004
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
правильно ли я понимаю, что аксапта и EF точно используют один и тот же диалект oData для общения друг с другом?
А можно ссылку на то, как EF сам по себе использует ODATA? У меня сложилось впечатление что
  • Там нет такого провайдера
  • Выставить наружу данные можно только написав специфический сервис

То есть сам EF ничего про ODATA не знает.
Старый 29.12.2016, 18:50   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
Сотрудники Microsoft Dynamics
 
3,755 / 1852 (69) ++++++++
Регистрация: 16.01.2004
Адрес: Москва
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
редставь если в AX данный можно изменить только через Data Entity. Клево, а?
Написал логику 1 раз и пользуешь ее везде - начальные данные, миграция, стороние вендоры-интеграции, формочки, отчеты.
Вот только контролы на формочках сейчас не могут редактировать энтити, насколько я знаю.
Старый 29.12.2016, 19:11   #9  
belugin is offline
belugin
Участник
Аватар для belugin
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
Сотрудники Microsoft Dynamics
 
3,755 / 1852 (69) ++++++++
Регистрация: 16.01.2004
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
Вместо понятия Relations - понятие Принадлежит.
Ляпота. Программистская.
"Пинадлежит" концептуально одно из видов Relations. Просто в аксапте Relations не дотупны их запросов. Нельзя написать.

X++:
select PurchaseOrder where exists(PurchaseOrder.markup.Code == 'x') && exists(PurchaseOrder.lines.markup.code == 'x');
Я как программист вообще не хочу задумываться как именно реализовано Relation - естественным ключем, искусственным или еще как-то.
Старый 29.12.2016, 19:15   #10  
belugin is offline
belugin
Участник
Аватар для belugin
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
Сотрудники Microsoft Dynamics
 
3,755 / 1852 (69) ++++++++
Регистрация: 16.01.2004
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
Какие могут быть рациональные причины для изобретения собственного велосипеда в Аксапте?
Как ORM это vietnam of computer science так и создание бизнесобъектов это Вьетнам Аксапты. В итоге решили вырастить из того, что есть. Инкрементно. Добавить во view возможность обновления данных и постепенно наращивать возможности.
Старый 29.12.2016, 19:31   #11  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,249 / 3064 (143) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от belugin Посмотреть сообщение
То есть сам EF ничего про ODATA не знает.
вот ведь обломал... а у меня такая теория складывалась.
спасибо.

да, внимательно посмотрел.
да, EF работает с connection string и в конечном итоге использует класс-провайдер, который должен быть специально создан для EF.
да, есть как сторонние решения, так и провайдер oData для SQL
да, ты прав EF не заточен под oData изначально. и не содержит провайдера oData в поставке по умолчанию.

надо подумать. спасибо.

=======================
внезапно! среди провайдеров oData обнаружились:
  • Dynamics NAV
  • Dynamics CRM
  • 1C
http://www.odata.org/ecosystem/

надо подумать.
Старый 29.12.2016, 19:32   #12  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,249 / 3064 (143) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от belugin Посмотреть сообщение
Как ORM это vietnam of computer science так и создание бизнесобъектов это Вьетнам Аксапты. В итоге решили вырастить из того, что есть. Инкрементно. Добавить во view возможность обновления данных и постепенно наращивать возможности.
это ты серьезно сейчас?
Старый 29.12.2016, 19:40   #13  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,249 / 3064 (143) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от belugin Посмотреть сообщение
"Принадлежит" концептуально одно из видов Relations
все это указатели )
но на практике программисты всевозможными путями пытаются избавиться от указателей в пользу ссылок.

казалось бы - пустая смена терминологии.

но в результате современные программные библиотеки навязывают стиль мышления "содержит", а не "указывает".
объект "содержит" другой объект
объект "принадлежит" другому объекту.
хотя в реальной памяти конечно же работают указатели.

так и relations - это указатели в области баз данных
relations требуют суррогатных ключей.
relations требуют внимания от программиста

если же перейти на уровень "принадлежит", то получим структуры типа xml/json
где никаких суррогатных ключей (указателей) не требуется.

но зато такая абстракция "протекает", если объект может принадлежать нескольким объектам. что в программировании ссылок, что в программировании баз данных.

примерно так.

==========================
поэтому я и считаю, что переход с абстракции relation на следующий уровень абстракции "принадлежит" сильно упрощает программирование в большинстве случаев.

но именно из-за "протекания" абстракции и вводят такое понятие как "бизнес-данные"
Старый 29.12.2016, 20:36   #14  
belugin is offline
belugin
Участник
Аватар для belugin
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
Сотрудники Microsoft Dynamics
 
3,755 / 1852 (69) ++++++++
Регистрация: 16.01.2004
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
это ты серьезно сейчас?
А похоже на шутку?
За это сообщение автора поблагодарили: mazzy (2).
Старый 29.12.2016, 20:48   #15  
belugin is offline
belugin
Участник
Аватар для belugin
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
Сотрудники Microsoft Dynamics
 
3,755 / 1852 (69) ++++++++
Регистрация: 16.01.2004
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
все это указатели )
но на практике программисты всевозможными путями пытаются избавиться от указателей в пользу ссылок

казалось бы - пустая смена терминологии
Не пустая. У ссылок нет арифметики указателей. У ключей есть такая арифметика - можно сделать recid++ или accountname + 'a'
Цитата:
Сообщение от mazzy Посмотреть сообщение

но в результате современные программные библиотеки навязывают стиль мышления "содержит", а не "указывает".
объект "содержит" другой объект
объект "принадлежит" другому объекту.
хотя в реальной памяти конечно же работают указатели
Прочитай семантику uml - "содержит" - лишь один из видов отношений.

Цитата:
Сообщение от mazzy Посмотреть сообщение
и relations - это указатели в области баз данных
relations требуют суррогатных ключей.
relations требуют внимания от программиста

Не требуют relation суррогатных ключей - открой морпхикс и простой рилейшен на любых ключах.

Это ключи а не релейшены указатели. Это они требуют внимания программиста. Проблема аккаунты в том, что нельзя в запросах использовать рилейшены аи не ключи.

Цитата:
если же перейти на уровень "принадлежит", то получим структуры типа xml/json
где никаких суррогатных ключей (указателей) не требуется.
Требуется как только надо изобразить что-то сложнее иерархии.

Последний раз редактировалось belugin; 29.12.2016 в 20:51.
Старый 29.12.2016, 22:43   #16  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,249 / 3064 (143) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от belugin Посмотреть сообщение
Прочитай семантику uml - "содержит" - лишь один из видов отношений.
ну да, ну да... использует, наследует...
но со ссылками почти все превращается в семантику "содержит".

кроме того, мы же находимся в контексте data entity.
а в этом контексте даже навигационные свойства к внешним data entity превращаются в "принадлежит".

я говорил в этом контексте.
согласен с тем, что сформулировано коряво.
над формулировкой нужно еще подумать.

Цитата:
Сообщение от belugin Посмотреть сообщение
Не требуют relation суррогатных ключей - открой морпхикс и простой рилейшен на любых ключах.
да, ты прав. это я неточно сформулировал.

я говорил не о любых relation,
а о сильно нормализованных таблицах.
в которых связь технически нужно реализовать, но отражения на реальный мир эта связь не имеет.
такие relation как правило реализуются суррогатными ключами.

в аксапте это DimId, системная номерная серия и прочие
для таких ключей в номерной серии безболезненно можно использовать & вместо # - пользователи этого не заметят.

так вот, data entity полностью устраняют потребность в таких технических ключах.

Цитата:
Сообщение от belugin Посмотреть сообщение
Это ключи а не релейшены указатели. Это они требуют внимания программиста. Проблема аккаунты в том, что нельзя в запросах использовать рилейшены аи не ключи.
да-да. именно это я и имел в виду.
нужно генерить искуственные ключи, чтобы их можно было использовать как Foregn Key,
и таким образом реализовать Relation в сильно нормализованных таблицах.

да, сформулировано было коряво.
надо подумать


Цитата:
Сообщение от belugin Посмотреть сообщение
Требуется как только надо изобразить что-то сложнее иерархии.
ну да, ну да - "если объект может принадлежать нескольким объектам".
другими словами, граф, содержащий хотя бы один нетривиальный цикл. (не дерево)

Последний раз редактировалось mazzy; 29.12.2016 в 22:49.
Старый 29.12.2016, 22:54   #17  
belugin is offline
belugin
Участник
Аватар для belugin
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
Сотрудники Microsoft Dynamics
 
3,755 / 1852 (69) ++++++++
Регистрация: 16.01.2004
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
кроме того, мы же находимся в контексте data entity.
а в этом контексте даже навигационные свойства к внешним data entity превращаются в "принадлежит".
Это как? У энтитей могут быть и другие отношения.

Цитата:
в которых связь технически нужно реализовать, но отражения на реальный мир эта связь не имеет.
Мне это тоже непонятно. Нельзя ли увидеть пример. Как правило у таких таблиц эта связь является отражением чего-то в предметной области (например обобщения). Но при этом платформа не содержит удобного способа работы с такими связями.

Цитата:
такие relation как правило реализуются суррогатными ключами.

в аксапте это DimId, системная номерная серия и прочие
для таких ключей в номерной серии безболезненно можно использовать & вместо # - пользователи этого не заметят.

так вот, data entity полностью устраняют потребность в таких технических relation.
Relation есть в предметной области. Entity для потребителя представляет такой relation как отсутствующий, как я понял. То есть вместо "У строки есть набор аналитик" получается "У строки есть подразделение". А сама группировка некого набора признаков в понятие "набор аналитик" исчезает.
Старый 30.12.2016, 01:47   #18  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
493 / 246 (9) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Цитата:
Сообщение от mazzy Посмотреть сообщение
Не-не-не-не.
это артефакт odata. http://www.odata.org/getting-started/basic-tutorial/
обрати внимание на тег "@odata.nextLink"

насколько я понимаю, по стандарту oData ответ дается порциями.
в ответе будет ссылка на следующую порцию, если она есть.

и размер страницы - это размер порции.
разве не так?
Все правильно. Но разница в том, что это не настраивается в AX. В стандартной oData нету дефолтного размера страницы, но ее можно настроить если надо.

oData + webAPI + EF - Более гибкая по сравнению с AX Data Entity.

Вообще говоря EF для oData не требуется, его используют из-за удобства. Вот пример -
WebAPI oData без EF (English)

Таким же методом данные из ax 2012 выставляются наружу через oData.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
За это сообщение автора поблагодарили: mazzy (2).
Старый 30.12.2016, 01:59   #19  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
493 / 246 (9) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Цитата:
Сообщение от mazzy Посмотреть сообщение
если опустить вопросы авторизации,
то можно ли предположить, что в аксаптовские data entity заранее заложена возможность работать с аксаптой из отдельно написанных маленьких приложений, которые используют Entity Framework?
Насколько я понимаю в MS есть светлая мечта запихнуть данные в CDM и использовать PowerApp для доступа-изменений.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 30.12.2016, 09:02   #20  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
20,249 / 3064 (143) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
Насколько я понимаю в MS есть светлая мечта запихнуть данные в CDM и использовать PowerApp для доступа-изменений.
есть.
но откуда ноги растут и как почему выбрана именно такая реализация?
понятно, что вряд ли мы узнаем точно.

но ведь можно попытаться воссоздать ход рассуждений, аргументы.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: AX Performance - What information and data to collect when you want to open a support case Blog bot DAX Blogs 0 29.09.2015 15:11
Dynamics AX Sustained Engineering: Announcing an update to enable the use of SQL Server 2014 with the AX 2012 R2 CU7 version of the Data Import/Export Framework (DIXF) Blog bot DAX Blogs 0 23.03.2015 22:12
axsa: Power BI and Dynamics AX: Part 4: Data Refresh and Q&A Blog bot DAX Blogs 0 25.02.2015 20:12
emeadaxsupport: AX Performance Troubleshooting Checklist Part 2 Blog bot DAX Blogs 0 09.09.2014 16:11
axinthefield: Dynamics AX Event IDs Blog bot DAX Blogs 0 01.03.2011 22:11
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:49.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.