我在 6 个月前写了一段代码,运行良好并部署在多个环境中。我现在有了一个新的增强功能,当我尝试运行相同的代码时,奇怪的是它给了我一个错误。我在网上搜索但没什么帮助。以下是相关代码:
var parameter = new SqlParameter("@SearchCriteria", SqlDbType.Structured);
parameter.Value = searchCriteria;
parameter.TypeName = "dbo.SearchCriteria";
var output = entities.Database.SqlQuery<tablename>(
"dbo.storedprocedureName @SearchCriteria",
parameter).ToList<tablename>();
它给了我错误
The type of column 'SelectedValue' is not supported. The type is 'Object'.
相同的部署代码仍在其他服务器上运行,没有任何问题。不确定我的电脑发生了什么变化!!
我的表类型定义:
CREATE TYPE [dbo].[SearchCriteria] AS TABLE(
[SelectedAttribute] [varchar](50) NULL,
[SelectedCriteria] [varchar](50) NULL,
[SelectedValue] [varchar](50) NULL)
我相信这个错误不是来自存储过程,而是来自 ADO.NET/Entity Framework,甚至在调用存储过程之前。我使用 SQL Profile 进行了跟踪,因此调用从未命中 DB。我尝试直接在 SSMS 上运行 SP,SP 运行良好。因此,我可以看出它与 Entity Framework 或 ADO.NET 有关。
最佳答案
我在 C# 中有一个对象,它存储 SearchCriteria 并在使用 EF 发送到存储过程之前转换为 DataTable。
其中一个字段“SelectedValue”被声明为“Object”。我将其更改为“字符串”,一切正常。
我完全不知道这段代码到目前为止是如何工作的,为什么现在坏了!!我是编写它的人,现在也是我修改它的人,所以中间人也不会更改 :)
旧类:
public class SelectionCriteria
{
public string SelectedAttribute { get; set; }
public string SelectedCriteria { get; set; }
public object SelectedValue { get; set; }
}
修改类:
public class SelectionCriteria
{
public string SelectedAttribute { get; set; }
public string SelectedCriteria { get; set; }
public string SelectedValue { get; set; }
}
关于c# - Entity Framework - 不支持列 'ColumnName' 的类型。类型是 'Object',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31390373/
相关文章:
javascript - 强制 JSON.stringify 使用十进制表示法
android - RecyclerView 项目有时无法正确显示,直到我滚动(仅在 Genymot
android - 在 Charles Proxy 中解码 RAW protobuf 数据
xslt - 我们如何使用 jenkins 控制台日志通过和失败计数生成 html 报告?
node.js - gulp 段错误 : 11 and Abort trap: 6 OSX Yose
angularjs - 在剑道下拉列表中选择 "0"作为值的项目