[ 
https://issues.apache.org/jira/browse/IGNITE-4415?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Pavel Tupitsyn resolved IGNITE-4415.
------------------------------------
    Resolution: Fixed
      Assignee:     (was: Pavel Tupitsyn)

> .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
>              Labels: .NET
>             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)

Reply via email to