我在查询中遇到了一些性能瓶颈。每当我在我的实体中引入属性作为字节时,会发生什么情况,EF 4.1在处理它之前将其转换为int。给定的代码将解释:EF 4.1 SQL Compact字节
var segmentQuery = workUnit.SegmentRepository.GetQuery()
.Where(x => x.FileId == file.Id)
.Where(x => x.StateValue == (byte)SegmentState.Unhandeled)
.OrderBy(x => x.Index);
很好地转化为:
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
然而,在上述情况下: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个字节,但是,更改为字节会中止我的查询。
我做错了什么?有什么我可以做的吗?这个问题是已知的吗?
谢谢!
**更新**
[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);
}
}
}
你可以发布'StateValue和'SegmentState'类型吗?如果你正在处理大量的数据,那么我不认为SQL CE能够处理它们 – Eranga 2011-06-10 23:17:15