Собственно, начал использовать T4 и оказалось, что некоторые несознательные личности используют тип longtext в mysql. А его длина 2^32-1. Как следствие, Convert.ToInt32() падает с треском. Есть предложение сделать длину колонки long'ом.
Готов исправить все шаблоны сам, если руководство посчитает фикс нужным.
AssemblyResolve фактически не работает. Словарь, по которому идёт проверка нигде не заполняется. Сборки, загруженные в домен не проверяются.
Ключевые слова языка не экранируются — если есть поля вида private, namespace — всем весело.
В принципе, тоже могу поправить попробовать.
Здравствуйте, Aen Sidhe, Вы писали:
AS>Собственно, начал использовать T4 и оказалось, что некоторые несознательные личности используют тип longtext в mysql. А его длина 2^32-1. Как следствие, Convert.ToInt32() падает с треском. Есть предложение сделать длину колонки long'ом.
Не совсем понял проблему.
AS>Готов исправить все шаблоны сам, если руководство посчитает фикс нужным.
Исправлять баги всегда нужно. Только сначала нужно понять, что это баги
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Aen Sidhe, Вы писали:
AS>Так же нашёл пару багов.
AS>AssemblyResolve фактически не работает. Словарь, по которому идёт проверка нигде не заполняется.
Так он предназначен для кастомного заполнения.
AS>Сборки, загруженные в домен не проверяются.
А зачем? По идее они не должны проходить через AssemblyResolve.
AS>Ключевые слова языка не экранируются — если есть поля вида private, namespace — всем весело. AS>В принципе, тоже могу поправить попробовать.
Давай.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Aen Sidhe, Вы писали:
AS>>Собственно, начал использовать T4 и оказалось, что некоторые несознательные личности используют тип longtext в mysql. А его длина 2^32-1. Как следствие, Convert.ToInt32() падает с треском. Есть предложение сделать длину колонки long'ом.
IT>Не совсем понял проблему.
MySql.ttinclude:99
Length = rd.IsDBNull(rd.GetOrdinal("length")) ? 0 : Convert.ToInt32(rd["length"]), // Вот если длина будет 2^32-1, то тут будет OverflowException.
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Aen Sidhe, Вы писали:
AS>>Так же нашёл пару багов.
AS>>AssemblyResolve фактически не работает. Словарь, по которому идёт проверка нигде не заполняется.
IT>Так он предназначен для кастомного заполнения.
Ок, понятно.
AS>>Сборки, загруженные в домен не проверяются.
IT>А зачем? По идее они не должны проходить через AssemblyResolve.
Указал сборку так:
<#@ assembly name="MySql.Data" #>
Сборка загрузилась точно.
При вызове Activator.CreateInstance в GetConnection() вызывается AssemblyResolve, наверно потому что имя сборки в имени типа (MySql.Data.MySqlClient.MySqlConnection, MySql.Data) неполное. Точнее не копал, но факт в том, что оно само её не находит.
Здравствуйте, Aen Sidhe, Вы писали:
AS>MySql.ttinclude:99 AS>
AS>Length = rd.IsDBNull(rd.GetOrdinal("length")) ? 0 : Convert.ToInt32(rd["length"]), // Вот если длина будет 2^32-1, то тут будет OverflowException.
AS>
Да, надо поменять на long.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Aen Sidhe, Вы писали:
IT>>А зачем? По идее они не должны проходить через AssemblyResolve.
AS>Указал сборку так: AS>
AS><#@ assembly name="MySql.Data" #>
AS>
AS>Сборка загрузилась точно. AS>При вызове Activator.CreateInstance в GetConnection() вызывается AssemblyResolve, наверно потому что имя сборки в имени типа (MySql.Data.MySqlClient.MySqlConnection, MySql.Data) неполное. Точнее не копал, но факт в том, что оно само её не находит.
Странно. Есть идеи?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Aen Sidhe, Вы писали:
IT>>>А зачем? По идее они не должны проходить через AssemblyResolve.
AS>>Указал сборку так: AS>>
AS>><#@ assembly name="MySql.Data" #>
AS>>
AS>>Сборка загрузилась точно. AS>>При вызове Activator.CreateInstance в GetConnection() вызывается AssemblyResolve, наверно потому что имя сборки в имени типа (MySql.Data.MySqlClient.MySqlConnection, MySql.Data) неполное. Точнее не копал, но факт в том, что оно само её не находит.
IT>Странно. Есть идеи?
Взять в зубы логи Fusion и копать. Пока других нет. Сегодня/завтра дам результаты.
Здравствуйте, Aen Sidhe, Вы писали:
AS>Ещё вопрос. Как предполагается конфигурирование наследников от DbManager, если нет переопределённых конструкторов?
— partial class
— генерируем конструктор прямо в шаблоне
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, AndrewVK, Вы писали:
IT>>>Да, надо поменять на long. AVK>>Почему не uint?
IT>Можно и uint. Но потом если что придётся менять на long. Так лучше уж сразу.
Затычка от падений, если не находим сборку (путём просмотра всех сборок в домене).
Длина колонки теперь — long
Добавлен Func<string,string> EscapeIdentifier, который заботится о том, чтобы наши идентификаторы не конфликтовали с ключевыми словами языка. Для шарпа и VB сделано через CodeDomProvider.
Здравствуйте, Aen Sidhe, Вы писали:
AS>Патч AS>Доступа в репозиторий нет.
С этим всё просто. Сейчас разработка проекта ведётся на GitHub — https://github.com/IgorTkachev/bltoolkit. Создаётся форк проекта, вносятся изменения, делается Pull Request. Всё очень просто и удобно. Но если нет желания возиться с git, то можно внести изменения и по старинке.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>С этим всё просто. Сейчас разработка проекта ведётся на GitHub — https://github.com/IgorTkachev/bltoolkit. Создаётся форк проекта, вносятся изменения, делается Pull Request. Всё очень просто и удобно. Но если нет желания возиться с git, то можно внести изменения и по старинке.
Такие новости и все молчат, нужно же было объявление какое то повесить что ли. Это же другое дело