Стек овершлоу при обработке дерева
От: Jack128  
Дата: 25.02.10 10:56
Оценка: 72 (1)
БД

    public class CMManBase : DbManager
    {
        [TableName("RFolders")]
        public class RFolder
        {
            public long ID;
            public string Title;
            [MapField("rfolderid")]
            public long? ParentID;

            [Association(ThisKey = "ID", OtherKey = "ParentID", CanBeNull = true)]
            public List<RFolder> ChildFolders;
        }

        public IQueryable<RFolder> RFolders
        {
            get { return GetTable<RFolder>(); }
        }

        static CMManBase()
        {
            DbManager.AddDataProvider(typeof(BLToolkit.Data.DataProvider.FdpDataProvider));
        }
    }




Тут — стек оверфлоу
        [TestMethod]
        public void StackOverflowTest()
        {
            using (var db = new CMManBase())
            {                
                var query = from folder in db.RFolders
                            where folder.ChildFolders.Count == 688369
                            select folder;
                query.FirstOrDefault();
            }
        }


сорцы в 13 часов по москве обновлены из репозитория..
Re: Стек овершлоу при обработке дерева
От: IT Россия linq2db.com
Дата: 26.02.10 00:19
Оценка: 10 (1)
Здравствуйте, Jack128, Вы писали:

Это вроде пофиксилось. Версию брать из репозитория, что-то фтп отвалился.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: Стек овершлоу при обработке дерева
От: Holms США  
Дата: 27.02.10 04:11
Оценка: 76 (1)
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Jack128, Вы писали:


IT>Это вроде пофиксилось. Версию брать из репозитория, что-то фтп отвалился.

да вроде нет, всё еще возникает stack overlow в ревизии 922.
класс

public partial class ProjectTemplate
{
    [Association(ThisKey = "ParentId", OtherKey = "Id", CanBeNull = true)]
    public List<ProjectTemplate> Children;

    [MapIgnore]
    public int ChildrenCount
    {
        get; set;
    }
}


запрос
public static IEnumerable<DB2.ProjectTemplate> GetByParentId(int parentId)
{
    using (var ctx = DB.DbContext)
    {
        var q = from template in ctx.ProjectTemplate
                        where template.ParentId == parentId
                        select new DB2.ProjectTemplate
                        {
                            Id = template.Id,
                            ParentId = template.ParentId,
                            LinkToId = template.LinkToId,
                            Title = template.Title,
                            FileName = template.FileName,
                            Created = template.Created,
                            Format = template.LinkToId == 0
                                                 ? template.Format
                                                 : ctx.ProjectTemplate
                                                         .Where(_ => _.Id == template.LinkToId)
                                                         .Select(_ => _.Format)
                                                         .First(),
                            ChildrenCount = template.Children.Count,
                        };

        return q.ToList();
    }
}
... << RSDN@Home 1.2.0 alpha 4 rev. 1463>>
The life is relative and reversible.
Re[3]: Стек овершлоу при обработке дерева
От: Holms США  
Дата: 13.03.10 05:53
Оценка:
Здравствуйте, Holms, Вы писали:

H>Здравствуйте, IT, Вы писали:

Наверх, ошибка еще не пофиксена в ревизии 935.

LINQ
public static IEnumerable<ProjectTemplate> GetByParentId(int parentId)
{
    using (var ctx = Context)
    {
        var q = from template in ctx.ProjectTemplate
                        where template.ParentId == parentId
                        select new ProjectTemplate
                                         {
                                             Id = template.Id,
                                             ParentId = template.ParentId,
                                             LinkToId = template.LinkToId,
                                             Title = template.Title,
                                             FileName = template.FileName,
                                             Created = template.Created,
                                             Format = template.LinkToId == 0
                                                                    ? template.Format
                                                                    : ctx.ProjectTemplate
                                                                            .Where(_ => _.Id == template.LinkToId)
                                                                            .Select(_ => _.Format)
                                                                            .First(),
                                             ChildrenCount = template.Children.Count,
                                         };

        return q.ToList();
    }
}


class
public partial class ProjectTemplate
{
    [Association(ThisKey = "ParentId", OtherKey = "Id", CanBeNull = true)]
    public List<ProjectTemplate> Children;
}

Stack Trace
BLToolkit.3.dll!BLToolkit.Data.Sql.SqlQuery.TableSource.this[BLToolkit.Data.Sql.ISqlTableSource, string].get(BLToolkit.Data.Sql.ISqlTableSource table = null, string alias = null) Line 377 + 0xffffffd4 bytes    C#
     BLToolkit.3.dll!BLToolkit.Data.Sql.SqlQuery.CheckTableSource(BLToolkit.Data.Sql.SqlQuery.TableSource ts = {BLToolkit.Data.Sql.SqlQuery.TableSource}, BLToolkit.Data.Sql.ISqlTableSource table = {BLToolkit.Data.Sql.SqlTable}, string alias = null) Line 3597 + 0x11 bytes    C#
     BLToolkit.3.dll!BLToolkit.Data.Sql.SqlQuery.TableSource.this[BLToolkit.Data.Sql.ISqlTableSource, string].get(BLToolkit.Data.Sql.ISqlTableSource table = {BLToolkit.Data.Sql.SqlTable}, string alias = null) Line 379 + 0x1c bytes    C#
     BLToolkit.3.dll!BLToolkit.Data.Sql.SqlQuery.CheckTableSource(BLToolkit.Data.Sql.SqlQuery.TableSource ts = {BLToolkit.Data.Sql.SqlQuery.TableSource}, BLToolkit.Data.Sql.ISqlTableSource table = {BLToolkit.Data.Sql.SqlTable}, string alias = null) Line 3597 + 0x11 bytes    C#
    ....
... << RSDN@Home 1.2.0 alpha 4 rev. 1465>>
The life is relative and reversible.
Re[4]: Стек овершлоу при обработке дерева
От: IT Россия linq2db.com
Дата: 19.03.10 01:07
Оценка:
Здравствуйте, Holms, Вы писали:

H>>Здравствуйте, IT, Вы писали:

H>Наверх, ошибка еще не пофиксена в ревизии 935.

А теперь?
Если нам не помогут, то мы тоже никого не пощадим.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.