Почему Entity Framework передает параметр в виде DECIMAL (5,0) для столбца, определенного с помощью NUMERIC(19)?
Столбец базы данных определяется как NUMERIC (19) в SQL Server. В , edmx показывает:
<Property Name="supplier_id" Type="numeric" Nullable="false" Precision="19" />
В я вижу это как:
<Property Type="Decimal" Name="supplier_id" Nullable="false" Precision="19" Scale="0" />
В базе данных SELECT с этим столбцом в предложении WHERE проходит через это определение параметра:
(@p__linq__0 decimal(5,0))
Для этого предложения WHERE:
WHERE ([Extent1].[supplier_id] = @p__linq__0)
Я понимаю, что числовые и десятичные числа эквивалентны, но почему точность меняется?1 ответ:
(@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 не должен быть тем же самым номером точности для, где предложение .
Entity Framework достаточно умна, чтобы вычислить точность числа, и только создает запрос с требуемой точностью.Примечание: это не относится к Insert и Update; EF создает запрос с та же точность, что и в колонке.