实体框架中的用户定义表生成了错误的查询

乔斯特·K

我认为我目前在Entity Framework 6中以及可能在ADO.NET中遇到错误。由于有最后期限,所以我不确定我是否可以等待此错误被修复,希望有人可以帮助我进行整洁的工作。

问题是查询在应该为0.01和0.05的地方使用值1和5。但是奇怪的是0.1似乎可以正常工作

当前生成的查询是:(从SQL Server Profiler获取)

declare @p3  dbo.someUDT
insert into @p3 values(NULL,5)
insert into @p3 values(5,0.10)
insert into @p3 values(NULL,1)
insert into @p3 values(1,2)

exec sp_executesql N'Select * from @AName',N'@AName  [dbo].[someUDT] READONLY',@AName=@p3

正确的代码是:

declare @p3  dbo.someUDT
insert into @p3 values(NULL,0.05)
insert into @p3 values(0.05,0.10)
insert into @p3 values(NULL,0.01)
insert into @p3 values(0.01,0.02)

exec sp_executesql N'Select * from @AName',N'@AName  [dbo].[someUDT] READONLY',@AName=@p3

我已经在github上创建了一个问题:用户定义的表插入了错误的值

我想在参数化查询中使用用户定义的表,此问题说明了如何完成此操作:实体框架存储过程表值参数

这是用于获取上述SQL代码的C#代码

DataTable dataTable = new DataTable();
dataTable.Columns.Add("value1", typeof(decimal));
dataTable.Columns.Add("value2", typeof(decimal));

dataTable.Rows.Add(null,0.05m); 
dataTable.Rows.Add(0.05m,0.1m); 
dataTable.Rows.Add(null,0.01m); 
dataTable.Rows.Add(0.01m,0.02m); 
List<SqlParameter> Parameters = new List<SqlParameter>();

Parameters.Add(new SqlParameter("@AName", SqlDbType.Structured) { Value = dataTable , TypeName= "dbo.someUDT" });

dbContext.Database.ExecuteSqlCommand("Select * from @AName", Parameters.ToArray());

和SQL代码获取用户定义表

CREATE TYPE [dbo].[someUDT] AS TABLE
(
   [value1] [decimal](16, 5) NULL,
   [value2] [decimal](16, 5) NULL
)

编辑:
Gert Arnold弄清楚了。根据他的回答,我在这里找到了一个现有报告SQL Server Profiler TextData Column处理了不正确的十进制输入

格特·阿诺德

这是一个奇怪的Sql Profiler工件。值已正确传输。我可以通过使用用户定义的类型和一个小表创建数据库来证明这一点:

CREATE TABLE [dbo].[Values](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Value] [decimal](16, 5) NOT NULL,
 CONSTRAINT [PK_Values] PRIMARY KEY CLUSTERED ([Id] ASC) ON [PRIMARY]
GO

并插入几个值:

Id          Value
----------- ---------------------------------------
1           10.00000
2           1.00000
3           0.10000
4           0.01000

然后我运行您的代码,稍作修改:

DataTable dataTable = new DataTable();
dataTable.Columns.Add("value1", typeof(decimal));
dataTable.Columns.Add("value2", typeof(decimal));

dataTable.Rows.Add(0.001m, 0.03m);
List<SqlParameter> Parameters = new List<SqlParameter>();

Parameters.Add(new SqlParameter("@AName", SqlDbType.Structured) { Value = dataTable, TypeName = "dbo.someUDT" });

using(var context = new MyContext(connStr))
{
    var query = "Select v.Id from dbo.[Values] v, @AName a "
        + " where v.Value BETWEEN a.value1 AND a.value2";
    var result = context.Database.SqlQuery<int>(query, Parameters.ToArray());
}

MyContex只是一个继承自DbContext其他类的类

之间只有一个值0.001m0.03m 而这恰恰是查询返回的内容4

但是,Sql Server事件探查器记录以下内容:

declare @p3 dbo.someUDT
insert into @p3 values(1,3) -- See here: the log is warped

exec sp_executesql N'Select v.Value from dbo.[Values] v, @AName a  where v.Value BETWEEN a.value1 AND a.value2',N'@AName [dbo].[someUDT] READONLY',@AName=@p3

在SSMS中返回记录2。

我认为这与区域设置和十进制分隔符与日志记录中某处的十进制组分隔符混淆有关。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在实体框架中配置自动生成表

来自分类Dev

实体框架中的Linq查询错误

来自分类Dev

实体框架生成的SQL查询

来自分类Dev

在实体框架中优化生成的SQL查询?

来自分类Dev

使用身份的实体框架-尝试更新AspNetUsers表中的用户

来自分类Dev

使用身份的实体框架-尝试更新AspNetUsers表中的用户

来自分类Dev

如何修复由实体框架生成的代码中的错误

来自分类Dev

实体框架的发布定义 (TFS) 中的编码 UI 错误

来自分类Dev

实体框架DbContext在查询中

来自分类Dev

实体框架生成不同的SQL查询

来自分类Dev

使用多个 OR 语句生成实体框架查询

来自分类Dev

实体框架中的ForeignKey错误

来自分类Dev

实体框架嵌套表查询到JSON

来自分类Dev

实体框架未生成表或过程的类

来自分类Dev

特定表的实体框架代码生成

来自分类Dev

如何在实体框架中将过程与用户定义的表类型一起使用

来自分类Dev

如何在实体框架中将过程与用户定义的表类型一起使用

来自分类Dev

如何在实体框架中为用户对用户关系定义模型

来自分类Dev

如何在实体框架中为用户对用户关系定义模型

来自分类Dev

传递实体框架查询以查看错误

来自分类Dev

实体框架抛出错误,生成输出

来自分类Dev

使用用户定义的类型时,实体框架急于加载导航属性会导致错误

来自分类Dev

SchemaGen错误生成了不必要的关联表

来自分类Dev

SchemaGen错误生成了不必要的关联表

来自分类Dev

实体框架在使用 ANY 时生成了非常糟糕的 SQL

来自分类Dev

当用户向表中插入新记录时,如何知道是否自动生成了代表表主键的字段值?

来自分类Dev

当用户向表中插入新记录时,如何知道是否自动生成了代表表主键的字段值?

来自分类Dev

实体框架+ SQLite插入错误的表

来自分类Dev

实体框架查询单个查询中的相关实体

Related 相关文章

  1. 1

    在实体框架中配置自动生成表

  2. 2

    实体框架中的Linq查询错误

  3. 3

    实体框架生成的SQL查询

  4. 4

    在实体框架中优化生成的SQL查询?

  5. 5

    使用身份的实体框架-尝试更新AspNetUsers表中的用户

  6. 6

    使用身份的实体框架-尝试更新AspNetUsers表中的用户

  7. 7

    如何修复由实体框架生成的代码中的错误

  8. 8

    实体框架的发布定义 (TFS) 中的编码 UI 错误

  9. 9

    实体框架DbContext在查询中

  10. 10

    实体框架生成不同的SQL查询

  11. 11

    使用多个 OR 语句生成实体框架查询

  12. 12

    实体框架中的ForeignKey错误

  13. 13

    实体框架嵌套表查询到JSON

  14. 14

    实体框架未生成表或过程的类

  15. 15

    特定表的实体框架代码生成

  16. 16

    如何在实体框架中将过程与用户定义的表类型一起使用

  17. 17

    如何在实体框架中将过程与用户定义的表类型一起使用

  18. 18

    如何在实体框架中为用户对用户关系定义模型

  19. 19

    如何在实体框架中为用户对用户关系定义模型

  20. 20

    传递实体框架查询以查看错误

  21. 21

    实体框架抛出错误,生成输出

  22. 22

    使用用户定义的类型时,实体框架急于加载导航属性会导致错误

  23. 23

    SchemaGen错误生成了不必要的关联表

  24. 24

    SchemaGen错误生成了不必要的关联表

  25. 25

    实体框架在使用 ANY 时生成了非常糟糕的 SQL

  26. 26

    当用户向表中插入新记录时,如何知道是否自动生成了代表表主键的字段值?

  27. 27

    当用户向表中插入新记录时,如何知道是否自动生成了代表表主键的字段值?

  28. 28

    实体框架+ SQLite插入错误的表

  29. 29

    实体框架查询单个查询中的相关实体

热门标签

归档