数据库列在 SQL Server 中定义为 NUMERIC(19)。在 中,edmx 显示:
<Property Name="supplier_id" Type="numeric" Nullable="false" Precision="19" />
在 中,我将其视为:
<Property Type="Decimal" Name="supplier_id" Nullable="false" Precision="19" Scale="0" />
在数据库中,WHERE 子句中包含此列的 SELECT 会通过以下参数定义进行:
(@p__linq__0 decimal(5,0))
对于这个 WHERE 子句:
WHERE ([Extent1].[supplier_id] = @p__linq__0)
我知道数字和小数是等效的,但为什么精度会改变?
(@p__linq__0 decimal(5,0))
是您提供的参数值的精度。
例如,
decimal number = 12345m;
var result = context.MyTables.Where(x => x.Number == number).ToList();
那么查询将是这样的 -
exec sp_executesql N'SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Number] AS [Number]
FROM [dbo].[MyTable] AS [Extent1]
WHERE [Extent1].[Number] = @p__linq__0',N'@p__linq__0 decimal(5,0)',
@p__linq__0=12345
答案是 SQL 语句不需要具有相同的精度数where 子句.
实体框架足够智能,可以计算出数字的精度,并且仅创建具有所需精度的查询。
注意:Insert 和 Update 则不然; EF 创建与列具有相同精度的查询。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)