1

쿼리에 약간의 성능 병목 현상이 있습니다. 무슨 일이 일어날 때마다 내 엔터티에서 바이트로 속성을 도입, EF 4.1 그것으로 작업하기 전에 그것을 캐스팅합니다. 주어진 코드를 설명합니다 : 위의 경우에, 그러나EF 4.1 SQL 압축 바이트

SELECT 
.... 
FROM (SELECT 
    [Extent1].[Id] AS [Id], 
    ... 
    [Extent1].[StateValue] AS [StateValue] 
    FROM [Segments] AS [Extent1] 
    WHERE ([Extent1].[FileId] = @p__linq__0) AND (0 = [Extent1].[StateValue]) 
) AS [Project1] 
ORDER BY [Project1].[Index] ASC 

:

var segmentQuery = workUnit.SegmentRepository.GetQuery() 
              .Where(x => x.FileId == file.Id) 
              .Where(x => x.StateValue == (byte)SegmentState.Unhandeled) 
              .OrderBy(x => x.Index); 

은에 잘 변환 StateValue 실제로 내 요구를 위해 많이 방법을 정수 (4 개 가지 상태)이다, 바이트로 변경 할 때, 나는 얻을 :

SELECT ... 
FROM (SELECT 
    [Extent1].[Id] AS [Id], 
     ... 
    [Extent1].[StateValue] AS [StateValue] 
    FROM [Segments] AS [Extent1] 
    WHERE ([Extent1].[FileId] = @p__linq__0) AND (0 = (CAST([Extent1].[StateValue] AS int))) 
) AS [Project1] 
ORDER BY [Project1].[Index] ASC 

이후 그 상태 필드에 (운이 좋게 필수적이지는 않지만) 효율적인 어느 날 그 공간을 행 더 후 100 000를 포함 할 수 있습니다이 표 그러나 1 바이트 만 차지하지만 바이트로 변경하면 쿼리가 죽습니다.

내가 잘못 했습니까? 내가 할 수 있는게 있습니까? 이 '문제'가 알려져 있습니까?

감사합니다.

** UPDATE **

[Flags] 
public enum SegmentState : byte 
{ 
    Unhandeled, 
    Downloaded, 
    Invalid, 
    Assembled 
} 

내 기업에 대한

:

/// <summary> 
/// Dont use this, use SegmentState instead 
/// </summary> 
[Required] 
public byte StateValue 
{ 
    get { return _stateValue; } 
    set { _stateValue = value; } 
} 

public SegmentState State 
{ 
    get { return (SegmentState)StateValue; } 
    set 
    { 
     if (State != value) 
     { 
      StateValue = (byte)value; 
      RaisePropertyChanged(StatePropertyName); 
     } 
    } 
} 
+0

'StateValue 및 SegmentState' 유형을 게시 할 수 있습니까? 당신은 큰 데이터 볼륨을 처리하는 경우 SQL CE는 그들을 처리 할 수 ​​있다고 생각하지 않습니다 – Eranga

답변

0

진심 EF를 사용하지 마십시오 - 그것은 당신의 인생에서 가장 큰 고통이 될 것입니다. MASSIVE와 C#의 역 동성을 살펴보세요. 삶에 대한 당신의 눈을 열어 줄 것입니다 ;-)

+0

아하, 대답을 듣고 싶지 않아;) 난 그냥 깔끔한 EF 4.1 레이어에 대한 내 일반 오래된 SQL DB 레이어를 바꿨어. 여러 가지 문제가 있지만 (여러 가지 문제가 있습니다.) 운 좋게도, 나는 EF에서 평범한 오래된 SQL 쿼리로 돌아갈 수있다. – Polity

+0

Massive도 대단해요.하지만 아래쪽면이 있습니다. 정말 해달라고하지 않을 때 역 동성을 사용하고 싶지 않습니다. 나는 .NET과 C#을 이유로 골랐다. – Polity

+0

성능을 목표로하지 않는 한 EF가 옵션이 될 수있다 ;-) –