linq2db status
09.04.2013
|
AndrewVK |
В выходные мы успешно мигрировали RSDN@Home с BLToolkit на linq2db. Было поправлено несколько не очень серьезных, но неприятных ошибок. В итоге полет нормальный, так что всем рекомендую как минимум новые проекты начинать на linq2db, и, по возможности мигрировать старые.
Основные исправления заключаются в смене неймспейсов и переименовании части атрибутов для разметки маппинга.
Изменений в запросах не понадобилось.
На очереди rsdn.ru
Основные исправления заключаются в смене неймспейсов и переименовании части атрибутов для разметки маппинга.
Изменений в запросах не понадобилось.
На очереди rsdn.ru
... << RSDN@Home 1.2.0 alpha 5 rev. 71 on Windows 8 6.2.9200.0>>
09.04.2013 46 комментариев |
AVK>В выходные мы успешно мигрировали RSDN@Home с BLToolkit на linq2db. Было поправлено несколько не очень серьезных, но неприятных ошибок. В итоге полет нормальный, так что всем рекомендую как минимум новые проекты начинать на linq2db, и, по возможности мигрировать старые.
AVK>Основные исправления заключаются в смене неймспейсов и переименовании части атрибутов для разметки маппинга.
AVK>Изменений в запросах не понадобилось.
если не сложно, скажите, чем принципиально отличается сабж? чего лишаемся/приобретаем переходя с BLToolkit на linq2db?
AK>если не сложно, скажите, чем принципиально отличается сабж?
Публичное АПИ и внутренности сильно чище и немного быстрее БЛТ. Плюс развиваться по ряду причин будет linq2db быстрее.
AK> чего лишаемся/приобретаем переходя с BLToolkit на linq2db?
Лишаемся прежде всего всяких старых методов типа ExecuteList и всяких наворотов в плане метапрограммирования.
AVK>Лишаемся прежде всего всяких старых методов типа ExecuteList и всяких наворотов в плане метапрограммирования.
а DataAccessor'ы остаются?
если да, то по идее можно реализовать посредством него
AK>а DataAccessor'ы остаются?
Нет.
AK>>а DataAccessor'ы остаются?
AVK>Нет.
а это уже плохо. никогла не знаешь когда понадобится хранимая процедура (по опыту они были всегда), не говоря уже о хинтах в запросах.
AK>Здравствуйте, AndrewVK, Вы писали:
AK>>>а DataAccessor'ы остаются?
AVK>>Нет.
AK>а это уже плохо. никогла не знаешь когда понадобится хранимая процедура (по опыту они были всегда), не говоря уже о хинтах в запросах.
вроде вот так можно чистый sql выполнить:
ну и вообще https://github.com/linq2db/linq2db/blob/master/Source/Data/DataConnectionExtensions.cs
J>ну и вообще https://github.com/linq2db/linq2db/blob/master/Source/Data/DataConnectionExtensions.cs
не могу найти QueryProc<T> для хранимок возвращающих скалярные типы, вижу только для получения последовательностей объектов (IDataReader-ориентированные).
можно добавить такую функцию?
AK>а это уже плохо.
Это не плохо и не хорошо, это такая идеология.
AK> никогла не знаешь когда понадобится хранимая процедура
Поддержка хранимок есть, только без акцессоров.
AK>а это уже плохо. никогла не знаешь когда понадобится хранимая процедура (по опыту они были всегда), не говоря уже о хинтах в запросах.
Вызов хранимых процедур автоматически генерируется T4 шаблонами.
IT>Вызов хранимых процедур автоматически генерируется T4 шаблонами.
пока не добрался.
еще вопрос: как быть без NonUpdatableAttribute учитыая, что остался DataConnection.Insert?
и еще: parameterPrefix у dataProviders больше не используется?
з.ы. в остальном небольшой проект перевел в течении 1.5 часов. пока полет нормальный.
AVK>Публичное АПИ и внутренности сильно чище и немного быстрее БЛТ. Плюс развиваться по ряду причин будет linq2db быстрее.
Иными словами 'bltoolkit все', эх надо было на Hibernate ставку делать
D>Иными словами 'bltoolkit все', эх надо было на Hibernate ставку делать
Тогда уж на EF.
Есть такая штука как груз обратной совместимости. Некоторые вещи просто нельзя сделать без поломки существующего кода. Нужен не просто рефакторинг кода, а изменение дизайна. L2DB как раз и есть такое изменение. Что касается поддержки и развития BLT, то если кто-то не заметил, то все фиксы и новые фичи, которые можно сделать в обоих библиотеках сегодня делаются и там и там. Так будет продолжаться пока это будет иметь смысл.
D>Иными словами 'bltoolkit все'
Нет.
[...]
Ждём подробностей.
А>Ждём подробностей.
Каких? Я вроде все основные моменты помянул? Если интересуют конкретные изменения, которые пришлось сделать в RSDN@Home, то его репозиторий публичный.
AVK>Здравствуйте, <Аноним>, Вы писали:
А>>Ждём подробностей.
AVK>Каких? Я вроде все основные моменты помянул? Если интересуют конкретные изменения, которые пришлось сделать в RSDN@Home, то его репозиторий публичный.
Здравствуйте.
Подскажите, пожалуйста, ссылку на репозиторий rsdn'а.
AVK>>Каких? Я вроде все основные моменты помянул? Если интересуют конкретные изменения, которые пришлось сделать в RSDN@Home, то его репозиторий публичный.
D>Подскажите, пожалуйста, ссылку на репозиторий rsdn'а.
https://bitbucket.org/andrewvk/janus
После перевода появились проблемы:
1) Некорректный HintPath:
Из за этого кстати на tc.rsdn.ru RSDN@Home не собирается...
2) На Sql Server не работает:
Exception с сообщением "Переполнение SqlDateTime. Должно находиться в пределах от 1/1/1753 12:00:00 AM и 12/31/9999 11:59:59 PM.".
В методе XmlBuilder.BuildMessage на запросе:
Несмотря на то, что генерируемый SQL не содержит выделенной части, linq2db все равно создает параметр для констнты DateTime.MinValue, что в свою очередь приводит к ошибке при попытке передать в параметре это значение.
Генерируеммый SQL:
Выходов 2:
1) Отказываемся от поддержки Sql Server 2008
Тогда linq2db использует тип datatime2 (которого нет в Sql Server 2005) в который DateTime.MinValue запихивается и все начинает работать .
2) Допиливаем linq2db что бы для неиспользованных констант параметры не генерировались.
ДА>1) Некорректный HintPath:
Бывает. Студия слишком много себе позволяет при поиске референсов. Но к сабжу отношения не имеет.
ДА>2) На Sql Server не работает:
ДА>Exception с сообщением "Переполнение SqlDateTime. Должно находиться в пределах от 1/1/1753 12:00:00 AM и 12/31/9999 11:59:59 PM.".
Это понятно почему. Поправлял для sqlite, сломал для mssql.
ДА>Выходов 2:
ДА>1) Отказываемся от поддержки Sql Server 2008
ДА>2) Допиливаем linq2db что бы для неиспользованных констант параметры не генерировались.
Все несколько проще. Переписываем вообще без этой константы:
Вообще можно просто откатить правки и обновить linq2db до после этого коммита — https://github.com/linq2db/linq2db/commit/1308fe9c85139f32a3e30d9cd0d605d6da693048. Драйвер sqlite не сообщает о том, что колонка может быть null, если эта колонка получается в результате outer join, в результате дефолтный ридер, который не проверяет содержимое на null, валится на InvalidCastException.
AVK>Здравствуйте, Дьяченко Александр, Вы писали:
ДА>>1) Некорректный HintPath:
AVK>Бывает. Студия слишком много себе позволяет при поиске референсов. Но к сабжу отношения не имеет.
Согласен, но поправить все равно нужно...
ДА>>2) На Sql Server не работает:
ДА>>Exception с сообщением "Переполнение SqlDateTime. Должно находиться в пределах от 1/1/1753 12:00:00 AM и 12/31/9999 11:59:59 PM.".
AVK>Это понятно почему. Поправлял для sqlite, сломал для mssql.
AVK>Вообще можно просто откатить правки и обновить linq2db до после этого коммита — https://github.com/linq2db/linq2db/commit/1308fe9c85139f32a3e30d9cd0d605d6da693048. Драйвер sqlite не сообщает о том, что колонка может быть null, если эта колонка получается в результате outer join, в результате дефолтный ридер, который не проверяет содержимое на null, валится на InvalidCastException.
Можно, но ситуация с неиспользуемыми параметрами, тоже не очень...
ДА>Можно, но ситуация с неиспользуемыми параметрами, тоже не очень...
Почему же не используемый? Очень даже используемый:
IT>Здравствуйте, Дьяченко Александр, Вы писали:
ДА>>Можно, но ситуация с неиспользуемыми параметрами, тоже не очень...
IT>Почему же не используемый? Очень даже используемый:
IT>
Ночь... смотрел не внимательно...
ДА>2) Допиливаем linq2db что бы для неиспользованных констант параметры не генерировались.
Костанту можно попробовать убрать так:
А>А что с конфигурацией DataProviders через App.config файл? Почему классы в LinqToDB.Configuration стали internal? Как подключаться к БД теперь?
Можно установить nuget linq2db.SqlServer, там есть инструкция.
Пытаюсь создать DataContext, он не видит строк подключения из Web.config. СУБД — MSSQL 2012. Что я делаю не так?
А>Пытаюсь создать DataContext, он не видит строк подключения из Web.config. СУБД — MSSQL 2012. Что я делаю не так?
А>
А что в configurationString?
AVK>А что в configurationString?
Имя ConnectionString'а.
AVK>>А что в configurationString?
А>Имя ConnectionString'а.
А в конфигурации что под этим именем находится?
AVK> А в конфигурации что под этим именем находится?
AVK>
Выдает ту же самую ошибку. В дебаггере DataConnection._configurations пуст.
AVK>Изменений в запросах не понадобилось.
я накидал unit test для тех проблем что обнаружил. буду признателен если поправите
тестовый проект
AK>тестовый проект
linq2db.Oracl ещё не добавлен в NuGet.
AK>>тестовый проект
IT>linq2db.Oracl ещё не добавлен в NuGet.
скомпилил из исходников
BTW,
этот тест:
не проходит и в BLToolkit. давно жду и надеюсь, что поправите (пока приходится юзать хранимку )
AVK>В выходные мы успешно мигрировали RSDN@Home с BLToolkit на linq2db. Было поправлено несколько не очень серьезных, но неприятных ошибок. В итоге полет нормальный, так что всем рекомендую как минимум новые проекты начинать на linq2db, и, по возможности мигрировать старые.
AVK>Основные исправления заключаются в смене неймспейсов и переименовании части атрибутов для разметки маппинга.
AVK>Изменений в запросах не понадобилось.
AVK>На очереди rsdn.ru
Подскажите, как работает .LoadWith().
Такой код не вытаскивает
А>Подскажите, как работает .LoadWith().
Пока не работает.