Sql server 从实体框架执行语句时发生SQL转换错误,但在执行相应的SQL时工作正常

Sql server 从实体框架执行语句时发生SQL转换错误,但在执行相应的SQL时工作正常,sql-server,entity-framework,Sql Server,Entity Framework,我有一段代码,在其中添加对象,并从对象上下文中删除另一个对象。保存对对象上下文的更改时,会引发以下SQL异常: 无法将nvarchar值“KV OBERARGAU136”转换为数据类型int 当然“KV Oberaargau136”不能转换为int值,问题是我不知道字符串是如何到达那里的。字符串只能来自以下代码位: History h = new History() { idTableRef = rpo.idOA, tableRef = "RelPersonOrganism",

我有一段代码,在其中添加对象,并从对象上下文中删除另一个对象。保存对对象上下文的更改时,会引发以下SQL异常:

无法将nvarchar值“KV OBERARGAU136”转换为数据类型int

当然“KV Oberaargau136”不能转换为int值,问题是我不知道字符串是如何到达那里的。字符串只能来自以下代码位:

History h = new History()
{
    idTableRef = rpo.idOA,
    tableRef = "RelPersonOrganism",
    date = now,
    idResponsible = entities.getUserOA().id,
    data = "<delete><organism><name><![CDATA[%name%]]></name><id>%id%</id></organism></delete>"
        .Replace("%name%", organism.defaultName)
        .Replace("%id%", organism.idOA.ToString())
};
History h=新历史()
{
idTableRef=rpo.idOA,
tableRef=“RelPersonOrganism”,
日期=现在,
idResponsible=entities.getUserOA().id,
data=“%id%”
.Replace(“%name%”,有机体.defaultName)
.Replace(“%id%”,有机体.idOA.ToString()
};
其中历史记录是一个实体,数据是一个字符串(实际上是SQL Server上的xml数据类型)

因此,我尝试使用SQL探查器查看哪些SQL语句可能引发该异常,下面是引发该异常的跟踪部分:

RPC:Starting exec sp_executesql N'insert [dbo].[History]([tableRef], [idTableRef], [date], [idResp... SQLTransaction Exception Error: 245, Severity: 16, State: 1 User Error Message Conversion failed when converting the nvarchar value 'KV Oberaarau136' to data type int. SQLTransaction SP:Completed insert [dbo].[History]([tableRef], [idTableRef], [date], [idResponsible], [data]) v... RPC:Completed exec sp_executesql N'insert [dbo].[History]([tableRef], [idTableRef], [date], [idRespon... RPC:正在启动exec sp_executesql N'insert[dbo].[History]([tableRef],[idTableRef],[date],[idResp。。。 SQLTransaction 异常错误:245,严重性:16,状态:1 将nvarchar值“KV Oberaarau136”转换为数据类型int时,用户错误消息转换失败。 SQLTransaction SP:已完成插入[dbo]。[历史]([tableRef],[idTableRef],[date],[idResponsible],[data])v。。。 RPC:Completed exec sp_executesql N'insert[dbo].[History]([tableRef],[idTableRef],[date],[idRespon…”。。。 其中,完整的SQL语句(在上述跟踪中显示了3次)为:

EXEC sp_executesql
插入[dbo].[History]([tableRef]、[idTableRef]、[date]、[idResponsible]、[data])
值(@0、@1、@2、@3、@4)
选择[id]
来自[dbo]。[历史]
其中@@ROWCOUNT>0且[id]=scope_identity(),
N'@0 nvarchar(255),@1 int,@2 datetime2(7),@3 int,@4 nvarchar(max)',
@0=N'RelPersonOrganism',
@1=1255,
@2='2013-01-11     12:35:18.4984109',
@3=1,
@4=N'136'
因此,通过查看跟踪,我得出结论,这条SQL语句是有罪的,尽管我觉得它一点也不错。所以我尝试在SQL Server Management Studio中执行它,它运行得非常好,没有错误


那么是什么触发了这个错误呢?

我也看不出你发布的查询会直接导致这个错误消息


因此,请检查是否有任何触发器或计算列可以解析XML,并且可能是原因。

表中有任何触发器吗?哦……是的,有一个,我想这可能是问题所在。我会回到这个问题上来……就是这样。问题来自于触发器。@Martin:如果你想添加它作为答案,我会将其作为c检查霍森一号。
EXEC sp_executesql
  N'insert [dbo].[History]([tableRef], [idTableRef], [date], [idResponsible], [data])
values (@0, @1, @2, @3, @4)
select [id]
from [dbo].[History]
where @@ROWCOUNT > 0 and [id] = scope_identity()',
  N'@0 nvarchar(255),@1 int,@2    datetime2(7),@3 int,@4 nvarchar(max) ',
  @0=N'RelPersonOrganism',
  @1=1255,
  @2='2013-01-11     12:35:18.4984109',
  @3=1,
  @4=N'<delete><organism><name><![CDATA[KV Oberaargau]]></name><id>136</id></organism></delete>'