![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
vutsh |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 24.3.2009 Репутация: нет Всего: нет |
Добрый день!!!
При синхронизации базы КПК (sdf) и ПК (mdf) вышли трудности, относительно связей. На КПК создаём клиента (он создался под ид 5), далее создаём компанию (он создался под ид 5123) где указано что оно связано с клиентом под ид 5. Далее пересылаем это всё на ПК (передача осуществляеться инсерты, которые в xml-ке), там исполняется запрос (инсерт) и клиент получается под ид уже НЕ 5, а 8791 вот...и когда мы исполняем (инсерт) для компании то оно говорит мол под ид 5 нечего нету, ну и естественно вываливается ошибка. Может кто сталкивался с такой проблемо? или знаеть какие нибудь утилы для синхронихации. Жду ответов... |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 8 Всего: 49 |
vutsh, есть 2 старндартных способа:
1. Обычная репликация SQL Server. http://msdn.microsoft.com/en-us/library/ms152568.aspx 2. Sync services for ADO.NET: http://msdn.microsoft.com/en-us/library/bb726002.aspx |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 8 Всего: 118 |
3) SET INSERT_IDENTITY ON
4) заменить id на GUID-ы и не мучаться с автоинкрементом -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Спорное решение. С некоторых пор я с опаской отношусь к использованию Guid'ов. |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 8 Всего: 118 |
и чем же они так тебя напугали?
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 8 Всего: 49 |
jonie,
1. отлаживать неудобно 2. индексы по ним много кушают и тормозят 3. про NEWSEQUENTIALID() даже management studio не знает Обычный подход - rowguid, и int identity not for replication в качестве PK. Делается автоматом самой студией при настройке репликации с SQL. Более того, в конце management studio код для старта репликации под compact framework выдает...надо только копипастнуть Это сообщение отредактировал(а) PashaPash - 25.3.2009, 22:22 |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
jonie, ууу. Это долгая история
![]() Работал я над одним замечательным web-проектом. На этапе проектирования по каким-то причинам (которые мне так и не удалось выяснить) было решено использовать Guid'ы. Как потом оказалось, смысла в этом не было: можно было легко обойтись автоинкрементным id. А между тем Guid'ы: 1. В четыре раза тяжелее int 2. Почем зря фрагментируют индексы. Guid'ы генерировались из .NET'а, поэтому использовать NewSequentiald не было возможности. Хотя можно было прикрутить какой-нибудь workaround вроде этого, но он тоже неидеален 3. Т. к. проект представлял собой Web-приложение, Guid'ы частенько использовались в качестве Get-параметров, поэтому строка запроса даже при одном параметре (не говоря уже о двух и более) выглядела очень некрасиво. Пользователи пугались. В итоге я решил взять на себя ответственность перевести базу на int'ы. Параллельно решил исправить несколько архитектурных (своих ![]() Как же приятно было в итоге увидеть желаемый результат... ![]() К слову, я допустил один серьезный промах. Вечером в пятницу закоммитились не все, а т. к. апдейтиться в понедельник не имело смысла (как и следовало ожидать, merge не справлялся), приходилось заново сливать копию (ведь коммититься без апдейта - грех ![]() Вот такая дурацкая история. Здесь, конечно, по большому счету виноваты не Guid'ы, а моя кривая библиотека hands.dll... но тем не менее после этого случая к Guid'ам я отношусь с опаской ![]() |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
||||
|
||||
jonie |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 8 Всего: 118 |
насчет тормозов конкретно в этой задаче несогласен. SQL CE ограничен и очень даже сильно.
в остальном, конечно, да.. но стоит ли данная задача так заморачиваться на скорость - решать автору. репликация доступна начиная с версии стандарт, если не ошибаюсь. -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||||
|
|||||||
vutsh |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 24.3.2009 Репутация: нет Всего: нет |
Да скорее всего буду делать через гуиды...
|
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 8 Всего: 49 |
Только не вручную ![]() jonie, а на нас сейчас кастомер в суд хочет подать и деньги забрать. Типа, софт не соответствует общепринятым стандартам. Придирки: 1. Использование GUID в качестве PK 2. Использование newid() вместо NEWSEQUENTIALID() 3. База не в 4-й NF 4. Использование ORM вместо ручной работы с sql.... А ты попробуй в дизайнере таблиц вбить значение по умолчанию (NEWSEQUENTIALID()) для колонки uniqueidentifier - она ругнется на синтаксическую ошибку, потребует 2 раза подтвердить перед сохранением. |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
А что вас побудило использовать Guid'ы? Весьма спорная претензия. А в чем претензия? Это каким-то образом снизило производительность или ограничило функционал? И, кстати, какая ORM использовалась? ![]() Хех... Действительно ![]() |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 8 Всего: 49 |
Не нас. Моего предшественника ;) Для сайта с /как выяснилось при сдаче проекта/ с требованием держать 1M транзакций в месяц -> необходимостью кластеризации -> упорядоченность ключа по времени - вполне нормальное требование.
Претензия примерно такая - сам заказчик писали проект на ASP.NET, и там орм тормозил. Поэтому все ормы тормозят. Потому что они выбирают данные из отдеельных таблиц, а не из специально обученных вьюшек...бла-бла-бла..."общепринятые индустриальные стандарты требуют ручной работы с sql, все остальное is evil". И вот докажи что не олень... Юзали NetTiers (кстати, !!!НИКОГДА!!! не используйте NetTiers). |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
||||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 8 Всего: 49 |
Мейнстрим по какому показателю? По количесву проектов - мейнстрим - это руби и php, без всяких орм. А аргументы в пользу ручной работы с sql всегда найти можно...например приложение будет расти, и придется делать какие-то "ручные оптимизации". А орм не дает полного контроля. А заказчику он воможно понадобится, поэтому "перепишите все заново, без ORM, и бесплатно". Так заказчик тоже тесты проводить умеет... И к тому же он old school PHP-ник |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |