You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ignite.apache.org by "Pavel Tupitsyn (JIRA)" <ji...@apache.org> on 2016/12/12 13:02:58 UTC

[jira] [Created] (IGNITE-4415) .NET: EntityFramework 2nd level cache fails for some complex queries

Pavel Tupitsyn created IGNITE-4415:
--------------------------------------

             Summary: .NET: EntityFramework 2nd level cache fails for some complex queries
                 Key: IGNITE-4415
                 URL: https://issues.apache.org/jira/browse/IGNITE-4415
             Project: Ignite
          Issue Type: Bug
          Components: platforms
    Affects Versions: 1.8
            Reporter: Pavel Tupitsyn
            Assignee: Pavel Tupitsyn
             Fix For: 2.0


This EF query (sent by user) fails when EF caching is enabled:
{code}
            var regionsAsm = user.GetAllChildRegions()
                .Where(w => w.RegionToRole.Any(a => a.RoleID == (int)UserRoles.ASM));
 
            var allInvestTitle = user.RepositoryFactory.InvestTitle.All();
 
            var isFutureYear = filters.ActualYear.Value.Year >
                               user.RepositoryFactory.Version.All().SingleOrDefault(w => w.IsCurrent)?.ActualYear;
 
            var distributorToRegionAsmBindings = !isFutureYear
                ? regionsAsm.SelectMany(s => s.DistributorToRegionAsmBinding)
                : regionsAsm.SelectMany(s => s.DistributorToRegionAsmBinding.Where(b => b.IsActual));
 
 
            var resultAllBudgets = distributorToRegionAsmBindings
                .Select(d => new { Distributor = d.Distributor, RegionAsm = d.Region, d })
                .SelectMany(dr => allInvestTitle, (dr, t) => new { dr.Distributor, dr.RegionAsm, InvestTitle = t, dr.d });
 
            var allBudgets = resultAllBudgets
                    .Select(b => new BudgetResult
                    {
                        AsmRegionId = b.RegionAsm.ID,
                        AsmRegionName = b.RegionAsm.Name,
                        DistributorId = b.Distributor.ID,
                        DistributorName = b.Distributor.Name,
                        RsmRegionId = b.RegionAsm.RegionExpand
                            .Where(w => w.Region1.RegionToRole.Any(a => a.RoleID == (int) UserRoles.RSM))
                            .Select(ss => ss.ParentRegionID)
                            .FirstOrDefault(),
                        RsmRegionName = b.RegionAsm.RegionExpand
                            .Where(w => w.Region1.RegionToRole.Any(a => a.RoleID == (int) UserRoles.RSM))
                            .Select(ss => ss.Region1.Name)
                            .FirstOrDefault(),
                        InvestTitleId = b.InvestTitle.ID,
                        InvestTitleName = b.InvestTitle.Name,
                    });
 
            var result = allBudgets.ToList();
{code}

Error:
{code}
class org.apache.ignite.binary.BinaryObjectException: Unexpected flag value [pos=43775, expected=12, actual=0]
    at org.apache.ignite.internal.binary.BinaryReaderExImpl.checkFlag(BinaryReaderExImpl.java:1403)
    at org.apache.ignite.internal.binary.BinaryReaderExImpl.readByteArray(BinaryReaderExImpl.java:468)
    at org.apache.ignite.internal.processors.platform.entityframework.PlatformDotNetEntityFrameworkCacheExtension.processInOutStreamLong(PlatformDotNetEntityFrameworkCacheExtension.java:125)
    at org.apache.ignite.internal.processors.platform.cache.PlatformCache.processInStreamOutLong(PlatformCache.java:761)
    at org.apache.ignite.internal.processors.platform.PlatformAbstractTarget.inStreamOutLong(PlatformAbstractTarget.java:78)
{code}

Generated SQL:
{code}
SELECT 
    [Project17].[ID2] AS [ID], 
    [Project17].[ID1] AS [ID1], 
    [Project17].[Name1] AS [Name], 
    [Project17].[ID] AS [ID2], 
    [Project17].[Name] AS [Name1], 
    CASE WHEN ([Project17].[C1] IS NULL) THEN 0 ELSE [Project17].[C2] END AS [C1], 
    [Project17].[C3] AS [C2], 
    [Project17].[Name2] AS [Name2]
    FROM ( SELECT 
        [Project13].[ID] AS [ID], 
        [Project13].[Name] AS [Name], 
        [Project13].[ID1] AS [ID1], 
        [Project13].[Name1] AS [Name1], 
        [Project13].[ID2] AS [ID2], 
        [Project13].[Name2] AS [Name2], 
        [Project13].[C1] AS [C1], 
        [Project13].[C2] AS [C2], 
        (SELECT TOP (1) 
            [Project14].[Name] AS [Name]
            FROM ( SELECT 
                [Extent14].[ParentRegionID] AS [ParentRegionID], 
                [Extent15].[ID] AS [ID], 
                [Extent15].[Name] AS [Name]
                FROM  [dbo].[RegionExpand] AS [Extent14]
                INNER JOIN [dbo].[Region] AS [Extent15] ON [Extent14].[ParentRegionID] = [Extent15].[ID]
                WHERE [Project13].[ID1] = [Extent14].[RegionID]
            )  AS [Project14]
            WHERE  EXISTS (SELECT 
                1 AS [C1]
                FROM [dbo].[RegionToRole] AS [Extent16]
                WHERE ([Project14].[ParentRegionID] = [Extent16].[RegionID]) AND (5 = [Extent16].[RoleID])
            )) AS [C3]
        FROM ( SELECT 
            [Project12].[ID] AS [ID], 
            [Project12].[Name] AS [Name], 
            [Project12].[ID1] AS [ID1], 
            [Project12].[Name1] AS [Name1], 
            [Project12].[ID2] AS [ID2], 
            [Project12].[Name2] AS [Name2], 
            [Project12].[C1] AS [C1], 
            [Project12].[C2] AS [C2]
            FROM ( SELECT 
                [Project8].[ID] AS [ID], 
                [Project8].[Name] AS [Name], 
                [Project8].[ID1] AS [ID1], 
                [Project8].[Name1] AS [Name1], 
                [Project8].[ID2] AS [ID2], 
                [Project8].[Name2] AS [Name2], 
                [Project8].[C1] AS [C1], 
                (SELECT TOP (1) 
                    [Project9].[ParentRegionID] AS [ParentRegionID]
                    FROM ( SELECT 
                        [Extent12].[ParentRegionID] AS [ParentRegionID]
                        FROM [dbo].[RegionExpand] AS [Extent12]
                        WHERE [Project8].[ID1] = [Extent12].[RegionID]
                    )  AS [Project9]
                    WHERE  EXISTS (SELECT 
                        1 AS [C1]
                        FROM [dbo].[RegionToRole] AS [Extent13]
                        WHERE ([Project9].[ParentRegionID] = [Extent13].[RegionID]) AND (5 = [Extent13].[RoleID])
                    )) AS [C2]
                FROM ( SELECT 
                    [Project7].[ID] AS [ID], 
                    [Project7].[Name] AS [Name], 
                    [Project7].[ID1] AS [ID1], 
                    [Project7].[Name1] AS [Name1], 
                    [Project7].[ID2] AS [ID2], 
                    [Project7].[Name2] AS [Name2], 
                    [Project7].[C1] AS [C1]
                    FROM ( SELECT 
                        [Project3].[ID] AS [ID], 
                        [Project3].[Name] AS [Name], 
                        [Project3].[ID1] AS [ID1], 
                        [Project3].[Name1] AS [Name1], 
                        [Project3].[ID2] AS [ID2], 
                        [Project3].[Name2] AS [Name2], 
                        (SELECT TOP (1) 
                            [Project4].[ParentRegionID] AS [ParentRegionID]
                            FROM ( SELECT 
                                [Extent10].[ParentRegionID] AS [ParentRegionID]
                                FROM [dbo].[RegionExpand] AS [Extent10]
                                WHERE [Project3].[ID1] = [Extent10].[RegionID]
                            )  AS [Project4]
                            WHERE  EXISTS (SELECT 
                                1 AS [C1]
                                FROM [dbo].[RegionToRole] AS [Extent11]
                                WHERE ([Project4].[ParentRegionID] = [Extent11].[RegionID]) AND (5 = [Extent11].[RoleID])
                            )) AS [C1]
                        FROM ( SELECT 
                            [Project1].[ID] AS [ID], 
                            [Project1].[Name] AS [Name], 
                            [Project1].[ID1] AS [ID1], 
                            [Project1].[Name1] AS [Name1], 
                            [Project1].[ID2] AS [ID2], 
                            [Project1].[Name2] AS [Name2]
                            FROM ( SELECT 
                                [Extent4].[RegionID] AS [RegionID], 
                                [Extent5].[DistributorID] AS [DistributorID], 
                                [Extent5].[RegionAsmID] AS [RegionAsmID], 
                                [Extent6].[ID] AS [ID], 
                                [Extent6].[Name] AS [Name], 
                                [Extent7].[ID] AS [ID1], 
                                [Extent7].[Name] AS [Name1], 
                                [Extent8].[ID] AS [ID2], 
                                [Extent8].[Name] AS [Name2]
                                FROM       [dbo].[User] AS [Extent1]
                                INNER JOIN  (SELECT [Extent2].[UserID] AS [UserID], [Extent3].[RegionID] AS [RegionID]
                                    FROM  [dbo].[UserToRegionRole] AS [Extent2]
                                    INNER JOIN [dbo].[RegionToRole] AS [Extent3] ON [Extent2].[RegionRoleID] = [Extent3].[ID] ) AS [Join1] ON [Extent1].[ID] = [Join1].[UserID]
                                INNER JOIN [dbo].[RegionExpand] AS [Extent4] ON [Join1].[RegionID] = [Extent4].[ParentRegionID]
                                INNER JOIN [dbo].[DistributorToRegionAsmBinding] AS [Extent5] ON [Extent4].[RegionID] = [Extent5].[RegionAsmID]
                                INNER JOIN [dbo].[Distributor] AS [Extent6] ON [Extent5].[DistributorID] = [Extent6].[ID]
                                INNER JOIN [dbo].[Region] AS [Extent7] ON [Extent5].[RegionAsmID] = [Extent7].[ID]
                                CROSS JOIN [dbo].[InvestTitle] AS [Extent8]
                                WHERE ([Extent1].[IsDeleted] <> 1) AND ([Extent1].[ID] = @p__linq__0)
                            )  AS [Project1]
                            WHERE  EXISTS (SELECT 
                                1 AS [C1]
                                FROM [dbo].[RegionToRole] AS [Extent9]
                                WHERE ([Project1].[RegionID] = [Extent9].[RegionID]) AND (7 = [Extent9].[RoleID])
                            )
                        )  AS [Project3]
                    )  AS [Project7]
                )  AS [Project8]
            )  AS [Project12]
        )  AS [Project13]
    )  AS [Project17]
{code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)