Re[3]: BLToolkit 4.1 released
От: Аноним  
Дата: 29.06.11 18:16
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Аноним, Вы писали:


А>>Хорошо бы добавить дополнительную возможность генерить модель в стиле EF Code First. Всё больше появляется разного рода инструментов в VS которая завязана на EF модель. Например EF Code First and Data Scaffolding with the ASP.NET MVC 3


IT>В стиле EF Code First это без атрибутов?


Это может быть с атрибутами и без, лучше конечно с атрибутами и дополнительно ассоциации представленные как виртуальные свойства.
Re: BLToolkit 4.1 released
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 30.06.11 21:26
Оценка:
Здравствуйте, IT, Вы писали:

IT>Просьба потестировать новую версию.


Янус. Подписка на форумы. Запрос:

public static IQueryable<T> GetAllForums<T>(
  DbManager mgr,
  Expression<Func<IServerForum, T>> srvSelector,
  Expression<Func<ISubscribedForum, T>> subsSelector)
{
  var subsFrms = mgr.SubscribedForums();
  return
    mgr
      .ServerForums()
      .Where(f => !subsFrms.Any(of => of.ID == f.ID))
      .Select(srvSelector)
      .Union(subsFrms.Select(subsSelector));
}

...

var forums =
  GetAllForums(
      mgr,
      f => new {f.ID, f.Name, f.Descript, Subscribed = false},
      f => new {f.ID, f.Name, f.Descript, Subscribed = true})
    .ToDictionary(forum => forum.ID);


Генерируется sql
(501) SELECT 
    t501.t496.ID as ID, 
    t501.t496.Name as Name, 
    t501.t496.Descript as Descript 
FROM 
    server_forums as t496
WHERE
    (NOT (EXISTS((497) SELECT 
    * 
FROM 
    subscribed_forums as t498
WHERE
    (t498.ID = t496.ID) )) )  
UNION 
(499) SELECT 
    t499.t500.ID as ID, 
    t499.t500.Name as Name, 
    t499.t500.Descript as Descript, 
    t499.True as c1 
FROM 
    subscribed_forums as t500


Ругань sqlite
SQLite error
SELECTs to the left and right of UNION do not have the same number of result columns


"t499.True as c1" не нужен
AVK Blog
Re: BLToolkit 4.1 released
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 30.06.11 21:39
Оценка:
Здравствуйте, IT, Вы писали:

Янус. Самый страшный запрос.

            var updated =
                msgs
                    .Into(db.TopicInfos())
                        .Value(_ => _.MessageID, m => m.ID)
                        .Value(_ => _.ForumID, m => m.ForumID)
                        .Value(_ => _.AnswersCount, m => m.TopicAnswers.Count())
                        .Value(
                            _ => _.AnswersRates,
                            m =>
                                rates
                                    .Where(r => r.Message.TopicID == m.ID && r.RateType > 0)
                                    .Sum(r => (int)r.RateType * r.Multiplier))
                        .Value(
                            _ => _.AnswersUnread,
                            m => m.TopicAnswers.Count(im => !im.IsRead) + (m.IsRead ? 0 : 1))
                        .Value(
                            _ => _.AnswersSmiles,
                            m =>
                                rates
                                    .Count(r => r.Message.TopicID == m.ID && r.RateType == MessageRates.Smile))
                        .Value(
                            _ => _.AnswersAgrees,
                            m =>
                                rates
                                    .Count(r => r.Message.TopicID == m.ID && r.RateType == MessageRates.Agree))
                        .Value(
                            _ => _.AnswersDisagrees,
                            m =>
                                rates
                                    .Count(r => r.Message.TopicID == m.ID && r.RateType == MessageRates.DisAgree))
                        .Value(
                            _ => _.AnswersToMeUnread,
                            m =>
                                m
                                    .TopicAnswers
                                    .Count(im => !im.IsRead && im.Parent.UserID == Config.Instance.SelfId))
                        .Value(_ => _.AnswersMarked, m => m.TopicAnswers.Count(im => im.IsMarked))
                        .Value(_ => _.LastUpdateDate, m => m.TopicAnswers.Max(im => (DateTime?)im.Date) ?? m.Date)
                        .Value(
                            _ => _.AnswersModeratorials,
                            m =>
                                mods
                                    .Count(
                                        mod =>
                                            mod.Message.TopicID == m.ID
                                            && (mod.Message.LastModerated == null || mod.Create > mod.Message.LastModerated)))
                        .Value(_ => _.SelfRates, m => m.Rating())
                        .Value(_ => _.SelfSmiles, m => m.SmileCount())
                        .Value(_ => _.SelfAgrees, m => m.AgreeCount())
                        .Value(_ => _.SelfDisagrees, m => m.DisagreeCount())
                        .Value(_ => _.SelfModeratorials, m => m.ActiveModeratorialCount())
                    .Insert();

В ExpressionBuilder.cs:1201 валится с исключением InvalidOperationException — Sequence contains no matching element
method = {m.TopicAnswers.Max(im => ConvertChecked(im.Date))}
predicate = {Method = {Boolean <ConvertSelector>b__43(System.Reflection.MethodInfo)}}
Вызывается из ExpressionBuilder.cs:1051
AVK Blog
Re[2]: BLToolkit 4.1 released
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 30.06.11 21:53
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>"t499.True as c1" не нужен


Точнее наоборот, нужен t501.False as c1 в первом запросе.
... << RSDN@Home 1.2.0 alpha 5 rev. 1495 on Windows 7 6.1.7601.65536>>
AVK Blog
Re: BLToolkit 4.1 released
От: Аноним  
Дата: 04.07.11 21:31
Оценка:
Здравствуйте, IT, Вы писали:

Проблем с парсингом пока не выявлено. За исключением вот этой старой проблемы: http://rsdn.ru/forum/prj.rfd/3948208.1.aspx
Автор: pr0ff
Дата: 06.09.10


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

Можно расценить это как пожелание .
Re[2]: BLToolkit 4.1 released
От: IT Россия linq2db.com
Дата: 04.07.11 23:16
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Проблем с парсингом пока не выявлено. За исключением вот этой старой проблемы: http://rsdn.ru/forum/prj.rfd/3948208.1.aspx
Автор: pr0ff
Дата: 06.09.10

IT>>С этого момента принимаются пожелания по дальнейшему развитию библиотеки
А>Можно расценить это как пожелание .

Можно рассценить как угодно. Но лучший способ добиться результата сегодня — это сделать форк проекта на GitHub, воспроизвести проблему в виде юнит теста в dev версии проекта и послать pull request.
Если нам не помогут, то мы тоже никого не пощадим.
Re[3]: BLToolkit 4.1 released
От: Аноним  
Дата: 05.07.11 11:31
Оценка:
Здравствуйте, IT, Вы писали:
IT>Можно рассценить как угодно. Но лучший способ добиться результата сегодня — это сделать форк проекта на GitHub, воспроизвести проблему в виде юнит теста в dev версии проекта и послать pull request.
Уже есть: Mapping.MemberMapperTest2() (в наст. время закомментирован)
За совет спасибо, в будущем так и буду поступать.
Re: Expression closures caching issue
От: Аноним  
Дата: 14.07.11 14:48
Оценка: 70 (1)
Замыкания выражений становятся частью выражений и кешируются. В результате при любом контексте (любых значениях локальных переменных) выражение всегда вычисляется относительно кешированных значений.

void Foo(Item item)
{
    using (var dbManager = new DbManager())
    {
        var isExistingItem = dbManager.Items.Contains(item);
        
        // аналогично:
        // var isExistingItem = dbManager.Items.Any(i => i.Id == item.Id);
    }
}


В данном примере при нескольких последовательных вызовах Foo для разных объектов isExistingItem всегда будет иметь одинаковое значение (существует ли первый объект) независимо от наличия текущего объекта в базе.

Получается такой запрос:
SELECT
    CASE WHEN EXISTS(
        SELECT
            *
        FROM
            [Items] [t1]
        WHERE
            [t1].[Id] = '<id от первого объекта>'
    ) THEN 1 ELSE 0 END as [c1]
Re[2]: Expression closures caching issue
От: IT Россия linq2db.com
Дата: 14.07.11 15:41
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Получается такой запрос:


Какая база?
Если нам не помогут, то мы тоже никого не пощадим.
Re[3]: Expression closures caching issue
От: Аноним  
Дата: 14.07.11 16:53
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Аноним, Вы писали:


А>>Получается такой запрос:


IT>Какая база?


СУБД: ssce 3.5.5692.0
Провайдер: BLT 4.1.0.0

Включение "OLD_PARSER" не помогает. На версии 3.2.0.1 работало корректно.
Re[4]: Expression closures caching issue
От: IT Россия linq2db.com
Дата: 14.07.11 16:59
Оценка:
Здравствуйте, Аноним, Вы писали:

А>СУБД: ssce 3.5.5692.0


Fixed.
Если нам не помогут, то мы тоже никого не пощадим.
Re: BLToolkit 4.1 released
От: Аноним  
Дата: 14.07.11 17:43
Оценка:
Здравствуйте, IT, Вы писали:

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

Хотелось бы чтобы Linq2DB, о которой ты говорил, увидела свет.
Re[2]: BLToolkit 4.1 released
От: IT Россия linq2db.com
Дата: 14.07.11 17:47
Оценка:
Здравствуйте, Аноним, Вы писали:

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

А>Хотелось бы чтобы Linq2DB, о которой ты говорил, увидела свет.

В планах. Уже даже завёл репу. Сейчас пофиксим некоторые баги, добавим некоторые фичи и вплотную этим займёмся.
Если нам не помогут, то мы тоже никого не пощадим.
Re[5]: Expression closures caching issue
От: Аноним  
Дата: 14.07.11 18:03
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Аноним, Вы писали:


А>>СУБД: ssce 3.5.5692.0


IT>Fixed.


Проверил, работает.
Спасибо за оперативность.

Когда появится релиз с этим исправлением?
Re[6]: Expression closures caching issue
От: IT Россия linq2db.com
Дата: 14.07.11 18:15
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Когда появится релиз с этим исправлением?


На этой неделе сделаем что-нибудь минорненькое.
Если нам не помогут, то мы тоже никого не пощадим.
Re: bug: NullableAttribute & InsertWithIdentity
От: ili Россия  
Дата: 15.07.11 11:11
Оценка: 70 (1)
Query<>.InsertWithIdentity(...) (подозреваю, что и Update тоже, но не проверял) игнорирует NullableAttribute:

        private class  NullableFieldTestObject
        {
            public int? NullabeInt;
            [BLToolkit.Mapping.Nullable] public int IntAsNullable;
        }


от на такой класс генерится такой запрос:

-- DECLARE @NullabeInt DBNull
-- DECLARE @IntAsNullable Int32

-- SET @NullabeInt = 
-- SET @IntAsNullable = 0

INSERT INTO [NullableFieldTestObject] 
(
    [NullabeInt],
    [IntAsNullable]
)
VALUES
(
    @NullabeInt,
    @IntAsNullable
)


З.Ы. я там закоммитил тест на это дело, правда не уверен что сделал это "правильно"
Re[2]: bug: NullableAttribute & InsertWithIdentity
От: IT Россия linq2db.com
Дата: 15.07.11 16:00
Оценка:
Здравствуйте, ili, Вы писали:

ili>Query<>.InsertWithIdentity(...) (подозреваю, что и Update тоже, но не проверял) игнорирует NullableAttribute:


Fixed.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: BLToolkit 4.1 released
От: IT Россия linq2db.com
Дата: 16.07.11 00:01
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Янус. Подписка на форумы. Запрос:


Fixed.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: BLToolkit 4.1 released
От: IT Россия linq2db.com
Дата: 17.07.11 06:21
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Янус. Самый страшный запрос.


Fixed.
Если нам не помогут, то мы тоже никого не пощадим.
Re: BLToolkit 4.1 released
От: Аноним  
Дата: 17.07.11 13:48
Оценка:
Здравствуйте, IT, Вы писали:

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

Было бы очень удобно, если бы был модуль интеграции BLT для LINQPad: http://www.linqpad.net/Extensibility.aspx
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.