为什么实体框架将参数作为 DECIMAL(5,0) 传递给使用 NUMERIC(19) 定义的列?

2023-12-14

数据库列在 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(使用前将#替换为@)

为什么实体框架将参数作为 DECIMAL(5,0) 传递给使用 NUMERIC(19) 定义的列? 的相关文章

  • 如何在Azure Function的应用程序设置中定义providername属性

    我正在尝试在我的 Azure 函数中建立实体框架数据库连接 因此我需要在函数的应用程序设置中定义一个连接字符串 仅在 Azure 门户中添加一个以我的 DbContext 类名作为键的连接字符串会导致异常 因为连接到数据库时 provide
  • 数据库未在客户端系统上运行的 C# Windows 窗体应用程序

    我用 C 开发了一个使用 SQL Server 数据库连接的 Windows 窗体应用程序 我在 NET Framework 4 0 和 SQL Server 2008 R2 中开发它 我的应用程序正在使用应用程序根目录中存在的本地数据库
  • 在c#中创建sql连接

    我是这个网站的新手 也是编程的新手 我目前正在通过销售点创建库存系统 它使用模态和非模态形式 我的问题是 我正在研究change password对话框必须连接到数据库才能覆盖密码字段 我使用的数据库是Microsoft SQL Serve
  • T-SQL:用最新的非空值替换 NULL 的最佳方法?

    假设我有这张表 id value 1 5 2 4 3 1 4 NULL 5 NULL 6 14 7 NULL 8 0 9 3 10 NULL 我想编写一个查询来替换任何NULL值与表中最后一个不为空的值在那一栏里 我想要这个结果 id va
  • VS 2010 Web应用程序中的ASP.NET Web Api CRUD操作

    我尝试在 VS 2010 Web 应用程序中进行 ASP NET Web Api CRUD 操作 但为什么结果没有从源表返回所有整行 这是我的代码 路线 Globax asax protected void Application Star
  • 意外的查询结果

    为什么我从 sql server 得到以下结果 SELECT 12 C1 CONVERT int C2 CASE WHEN THEN equal ELSE not equal END C3 Sql Server Fiddle 演示 http
  • 16 位、32 位和 64 位 IEEE-754 系统可以表示什么范围的数字?

    我对浮点数的表示方式有所了解 但恐怕还不够 一般问题是 对于给定的精度 就我的目的而言 以 10 为基数的精确小数位数 16 位 32 位和 64 位 IEEE 754 系统可以表示什么范围的数字 具体来说 我只对精确到 0 5 个位 或
  • SQL返回两行之间的秒差

    这个问题与SQL Server有关 我有下表 id size batch code product code additiontime 1 91 55555 BigD Red 2017 05 15 13 00 00 2 91 55555 B
  • 是什么原因导致 Linq 错误:此方法无法转换为存储表达式?

    我有一堆具有相同 select 语句的 Linq to Entity 方法 所以我想我会很聪明 并将其分离到它自己的方法中以减少冗余 但是当我尝试运行代码时 我得到了以下内容错误 该方法不能转化为 商店表达式 这是我创建的方法 public
  • 我应该对 ObjectContext 使用 using 关键字吗?

    我在这个网站或 CodeProject 的某个地方读到 好的规则是 如果某个类已经实现了 IDisposable 接口 那么您应该使用 using 关键字 因为使用翻译成 MSIL 的关键字会尝试 最终阻止如下内容 try some log
  • 是否有适用于 SQL Server Express 的 SQL Server Profiler? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有适用于 SQL Server Express 的 SQL Server Profiler 也许是开源的 或者也许只是一个可以帮助我查
  • 通知设置的数据库设计

    用户可以打开或关闭 他的通知设置 帐户 用于通知 例如 更改帐户资料信息 收到新消息等 通知可以通过电子邮件或手机 推送或短信 发送 用户可以只有 1 封电子邮件和多个手机设备 有什么方法可以改进以下数据库设计或者您会采取不同的方式吗 让我
  • 想要编写依赖于 SQL Server 表的所有对象的脚本

    查看依赖关系 显示依赖于 SQL Server 中的表的所有对象 现在 我如何使用 SSMS 在一个命令中编写所有这些对象的脚本 有没有免费的工具可以做到这一点 首先你可以尝试这个链接了解 SQL 依赖关系 http msdn micros
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • SQL Server 架构和默认架构

    我的数据库中有一个模式定义 除了现在每次执行 sql 语句时我都必须提供模式 SELECT FROM myschema table 我使用 Management Studio 为我的用户设置了默认架构 并运行了ALTER USER myUs
  • 我有三个共享相同数据库的项目,在所有项目中使用 EF 的最佳方法是什么?

    我有三个项目 WCF 项目 而不是客户端 我有一个数据库供所有项目使用 现在我将如何使用 EF 我应该创建第四个项目 其中包含数据库上下文和实体 然后在所有三个项目中添加对它的引用吗 或者我应该为每个项目提供单独的上下文 然后添加每个项目所
  • 组内 STRING_AGG 和 Visual Studio 的问题

    我正在使用 Visual Studio 2015 并且我的 SQL Server 数据库项目中的 STRING AGG Within GROUP 出现问题 SELECT Continent STRING AGG Country WITHIN
  • 返回日期为 null 作为 t-sql 中的最大值

    我有这张桌子 ID Date Value 3241 9 17 12 5 3241 9 16 12 100 3241 9 15 12 20 4355 9 16 12 12 4355 9 15 12 132 4355 9 14 12 4 100
  • 批量插入,asp.net

    我需要获取与会员相对应的 ID 号列表 在任何给定时间处理的数量可能在 10 到 10 000 之间 我可以毫无问题地收集数据 解析数据并将其加载到 DataTable 或任何内容 C 中 但我想在数据库中执行一些操作 将所有这些数据插入表
  • 为什么在一行中使用这个 C++ 函数两次会导致编译错误?

    我在尝试在 Visual C 2010 中实现智能相等测试宏类型模板函数时遇到了一些麻烦 该函数与VS 中关于模板函数默认参数的错误 https stackoverflow com questions 10343177 why do i g

随机推荐