[ANN] Надстройка к студии для генерации классов к Linq2BLT
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 28.01.10 22:38
Оценка: 227 (13)
В общем, хочу представить вашему вниманию свой проект для облегчения работы с Linq2BLT, целью которого в основном лишить Linq2SQL своего последнего (ИМХО) преимущества — наличия генератора классов. Про фичи лучше читайте тут: http://code.google.com/p/bltutilsvspackage/, ибо здесь их писать бесполезно ввиду того, что проект в активной разработке и список фичей будет меняться. Сегодня сделал более-менее рабочий инсталлер, но если что, проект можно собрать и самостоятельно. Для сборки нужен установленный VS SDK, для сборки сетапа — WiX 3.0 SDK, всё остальное уже имеется в SVN. Сам BLToolkit подключен через svn:external, посему при обновлении данного репозитория автоматически обновится и BLToolkit.

Краткая инструкция по использованию:
Правый щелчок на c# проекте -> Add New Item... -> BLToolkit Settings File -> Назови его как-нить(это имя будет частью имени контекста — SomethingDbContext) -> OK

Далее, дабл-клик на файле — ты увидишь страницу настроек. Вводишь имя сервака и имя базы. Из типов креденшелов пока работают тока 2 — clear text и Intergrated. После ввода инфы тыкай "Сохранить".
Для (пере)генерации файлов правый клик на проекте -> "Update Database Definition". По идее всё должно пройти нормально. Дальше надо руками подключить референс на BLToolkit и после этого проект должен нормально собираться.

Баги/предложения писать сюда или напрямую в багтрекер на сайте — буду разбираться по мере возможностей.

Огромное спасибо товарищу под ником Holms за альфа-тестирование и предложения!
[КУ] оккупировала армия.
Re: [ANN] Надстройка к студии для генерации классов к Linq2B
От: IT Россия linq2db.com
Дата: 29.01.10 00:16
Оценка:
Здравствуйте, koandrew, Вы писали:

Круть!

Баги:

— обламывается на именах таблиц с пробелами вроде "Order Details" из Northwind.

Пожелания:

— добавить опции для генерации автосвойств или полей.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: [ANN] Надстройка к студии для генерации классов к Lin
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 29.01.10 14:52
Оценка:
Здравствуйте, IT, Вы писали:


IT>Круть!



IT>Баги:


IT>- обламывается на именах таблиц с пробелами вроде "Order Details" из Northwind.

Fixed in rev. 26

IT>Пожелания:


IT>- добавить опции для генерации автосвойств или полей.

С автосвойствами да и вообще с внешним видом кода засада — я использую CodeDom для генерации кода, а там почти нет возможностей для управления внешним видом... Если кто вдруг знает, как устроить автосвойства через CodeDom — подскажите, я сделаю.

Ещё Holms подкинул идею генерить enum'ы для словарей на основе содержимого таблиц. Мне кажется, интересная мысля. В ближайшие выходные попробую что-нить сделать в этой сфере...
[КУ] оккупировала армия.
Re[3]: [ANN] Надстройка к студии для генерации классов к Lin
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 29.01.10 15:08
Оценка:
Здравствуйте, koandrew, Вы писали:

K>Если кто вдруг знает, как устроить автосвойства через CodeDom — подскажите, я сделаю.


Долько добавлением сниппета. Поэтому даже сам МС ныне использует не CodeDOM, а T4 и индивидуальные шаблоны для каждого языка.

K>Ещё Holms подкинул идею генерить enum'ы для словарей на основе содержимого таблиц.


Какая то очень странная идея, ИМХО.
... << RSDN@Home 1.2.0 alpha 4 rev. 1418 on Windows 7 6.1.7600.0>>
AVK Blog
Re[4]: [ANN] Надстройка к студии для генерации классов к Lin
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 29.01.10 15:24
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Долько добавлением сниппета. Поэтому даже сам МС ныне использует не CodeDOM, а T4 и индивидуальные шаблоны для каждого языка.

Откровенно говоря, я не вижу особого смысла заниматься украшательством автогенерённого кода, ибо он не предназначен для ручной правки... И CodeDom я выбрал по двум причинам — легкость переключения языка, на котором генерится код, и более-менее вменяемая и, что самое главное, готовая объектная модель.
[КУ] оккупировала армия.
Re[5]: [ANN] Надстройка к студии для генерации классов к Lin
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 29.01.10 15:35
Оценка:
Здравствуйте, koandrew, Вы писали:

K>Откровенно говоря, я не вижу особого смысла заниматься украшательством автогенерённого кода


Украшательство бог с ним, а вот отсутствие кучи конструкций это куда серьезнее.

K>И CodeDom я выбрал по двум причинам — легкость переключения языка, на котором генерится код


Как видишь, легкость относительная.

K>, и более-менее вменяемая и, что самое главное, готовая объектная модель.


Оно тебе нафига? Т4 как то без обходится, и ничего.
... << RSDN@Home 1.2.0 alpha 4 rev. 1418 on Windows 7 6.1.7600.0>>
AVK Blog
Re[2]: [ANN] Надстройка к студии для генерации классов к Lin
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 29.01.10 15:52
Оценка:
Здравствуйте, IT, Вы писали:

IT>- добавить опции для генерации автосвойств или полей.


Сейчас перечитал — ты имеешь ввиду генерацию публичных полей вместо свойств? Мне всегда казалось это очень плохим стилем
[КУ] оккупировала армия.
Re[5]: [ANN] Надстройка к студии для генерации классов к Lin
От: IT Россия linq2db.com
Дата: 29.01.10 15:54
Оценка: +1
Здравствуйте, koandrew, Вы писали:

K>Откровенно говоря, я не вижу особого смысла заниматься украшательством автогенерённого кода, ибо он не предназначен для ручной правки...


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

K>И CodeDom я выбрал по двум причинам — легкость переключения языка, на котором генерится код, и более-менее вменяемая и, что самое главное, готовая объектная модель.


Сложно что либо сказать. Часто бывает, что выбор простого, но не гибкого решения в дальнейшем оборачивается редкостным гемором и вся задача сводится в дальнейшем к борьбе с этой негибкостью и решение очень быстро превращается из простого в сложное и запутанное.
Если нам не помогут, то мы тоже никого не пощадим.
Re[6]: [ANN] Надстройка к студии для генерации классов к Lin
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 29.01.10 16:14
Оценка:
Здравствуйте, IT, Вы писали:
IT>Украшательством есть всегда смысл заниматься, хотя бы для того, чтобы не шарахаться от монитора, когда отладчик входит внутрь сгенерированного метода. Автосвойства полезны как раз для того, чтобы лишний раз в такой код не заходить.
Может и так. В принципе переделать движок дело не особенно сложное.

IT>Маппинг на поля, как я понимаю, вообще не возможен.

А он нужен? Если будет нужен — сделаю. Ничего сложного там нет.

IT>Сложно что либо сказать. Часто бывает, что выбор простого, но не гибкого решения в дальнейшем оборачивается редкостным гемором и вся задача сводится в дальнейшем к борьбе с этой негибкостью и решение очень быстро превращается из простого в сложное и запутанное.

Бывает и так...
[КУ] оккупировала армия.
Re[3]: [ANN] Надстройка к студии для генерации классов к Lin
От: IT Россия linq2db.com
Дата: 29.01.10 16:16
Оценка:
Здравствуйте, koandrew, Вы писали:

IT>>- добавить опции для генерации автосвойств или полей.


K>Сейчас перечитал — ты имеешь ввиду генерацию публичных полей вместо свойств? Мне всегда казалось это очень плохим стилем


Что именно в этом плохого?
Если нам не помогут, то мы тоже никого не пощадим.
Re[7]: [ANN] Надстройка к студии для генерации классов к Lin
От: IT Россия linq2db.com
Дата: 29.01.10 16:18
Оценка:
Здравствуйте, koandrew, Вы писали:

IT>>Маппинг на поля, как я понимаю, вообще не возможен.

K>А он нужен? Если будет нужен — сделаю. Ничего сложного там нет.

Раз не сложно, то почему бы и не сделать.
Если нам не помогут, то мы тоже никого не пощадим.
Re[7]: [ANN] Надстройка к студии для генерации классов к Lin
От: IT Россия linq2db.com
Дата: 29.01.10 16:20
Оценка: +1
Здравствуйте, koandrew, Вы писали:

K>Если будет нужен — сделаю. Ничего сложного там нет.


Кстати, ещё опционально хотелось бы иметь возможность добавлять к таким классам разметку DataContract для WCF.
Если нам не помогут, то мы тоже никого не пощадим.
Re[8]: [ANN] Надстройка к студии для генерации классов к Lin
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 29.01.10 17:26
Оценка: 29 (1)
Здравствуйте, IT, Вы писали:

IT>Раз не сложно, то почему бы и не сделать.


Сделал (ревизия 28)
[КУ] оккупировала армия.
Re[8]: [ANN] Надстройка к студии для генерации классов к Lin
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 29.01.10 17:27
Оценка: 29 (1)
Здравствуйте, IT, Вы писали:

IT>Кстати, ещё опционально хотелось бы иметь возможность добавлять к таким классам разметку DataContract для WCF.


Сделал (ревизия 28)
[КУ] оккупировала армия.
Re[3]: [ANN] Надстройка к студии для генерации классов к Lin
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.02.10 18:28
Оценка: +1
Здравствуйте, koandrew, Вы писали:

K>С автосвойствами да и вообще с внешним видом кода засада — я использую CodeDom для генерации кода, а там почти нет возможностей для управления внешним видом... Если кто вдруг знает, как устроить автосвойства через CodeDom — подскажите, я сделаю.


Сдается мне лучше вообще не использовать CodeDom.

Можно попробовать заменить CodeDom на CCI AST.
Но еще лучше просто генерировать текст. Например, тем же T4.

CodeDom обижен природой. Тут уже ничего не поделаешь.

В качестве затычки можешь просто использовать CodeSnippetXxx для подстановки текста в нужное место.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: [ANN] Надстройка к студии для генерации классов к Lin
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.02.10 18:30
Оценка:
Здравствуйте, koandrew, Вы писали:

K>Откровенно говоря, я не вижу особого смысла заниматься украшательством автогенерённого кода, ибо он не предназначен для ручной правки... И CodeDom я выбрал по двум причинам — легкость переключения языка, на котором генерится код, и более-менее вменяемая и, что самое главное, готовая объектная модель.


Ты ошибся только в двух предположениях. Она не готовая и не вполне вменяемая.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: [ANN] Надстройка к студии для генерации классов к Lin
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.02.10 18:41
Оценка: +1
Здравствуйте, IT, Вы писали:

IT>Автосвойства полезны как раз для того, чтобы лишний раз в такой код не заходить. Маппинг на поля, как я понимаю, вообще не возможен.


Ээээ... Товарисч, не пристало вам такую пургу нести! В мсиле автосвойств нет как ложки в матрице. Эффекта "незахождения отладчика в свойство" компилятор шарпа добивается путем добавления к коду свойств атрибутов System.Runtime.CompilerServices.CompilerGeneratedAttribute. Того же эффекта можно достичь добавив атрибут System.Diagnostics.DebuggerNonUserCode.


IT>Сложно что либо сказать. Часто бывает, что выбор простого, но не гибкого решения в дальнейшем оборачивается редкостным гемором и вся задача сводится в дальнейшем к борьбе с этой негибкостью и решение очень быстро превращается из простого в сложное и запутанное.


+1
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [ANN] Надстройка к студии для генерации классов к Lin
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.02.10 18:42
Оценка:
Здравствуйте, IT, Вы писали:

K>>Сейчас перечитал — ты имеешь ввиду генерацию публичных полей вместо свойств? Мне всегда казалось это очень плохим стилем


IT>Что именно в этом плохого?


Как же в МС сказали, что это плохо. Значит...
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [ANN] Надстройка к студии для генерации классов к Lin
От: Dog  
Дата: 04.02.10 18:47
Оценка: +1
VD>Но еще лучше просто генерировать текст. Например, тем же T4.
+1
Хоть можно будет шаблоны править по ходу.
Re[5]: [ANN] Надстройка к студии для генерации классов к Lin
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.02.10 18:52
Оценка: +1
Здравствуйте, Dog, Вы писали:

Dog>Хоть можно будет шаблоны править по ходу.


Ну, вот это будет вызвать проблемы. Ты же их будешь локально править. Если потом и автор их поправит, то будет тебе работа по синхронизации. При некотором количестве различий проще будет твои правки выбросить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.