EF6包含查询强制转换

时间:2013-09-26 15:08:10

标签: entity-framework ado.net-entity-data-model entity-framework-6

Edmx文件

<Property Name="SomePrimaryKeyID" Type="bigint" />

对应对象的属性是

<Property Type="Int64" Name="SomePrimaryKeyID" Nullable="false" />

查询:

  long[] ids = new long[]{1234567,1234568};
  var results = context.SomeEntities.Where(x=> ids.Contains(x.SomePrimaryKeyID)).ToList();

当我使用contains时,EF生成的查询具有显式转换,例如

... WHERE SomePrimaryKeyID IN (CAST (1234567 AS BIGINT),CAST (1234568 AS BIGINT))

由于long对应bigint,我认为不需要演员。有没有办法可以避免这种演员?

1 个答案:

答案 0 :(得分:0)

对于文字整数值,SQL Server中的默认类型为int。因为在你的例子中,文字值必须始终被强制转换(如果没有显式强制转换,它们将是'int'类型)以匹配SomePrimaryKeyID的类型(这是大int)。如果缺少明确的情况,Sql Server将不得不进行隐式转换,这实际上可能更昂贵,因为它必须首先推断SomePrimaryKeyID的类型才能知道将文字数转换​​为什么。