c# - Entity Framework - 不支持列 'ColumnName' 的类型。类型是 'Object'

标签 c# sql sql-server entity-framework ado.net

我在 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/

相关文章:

c# - 在 asp.net 中更新 UpdatePanel 中的图像 url

sql - 这个数据库查询有什么问题?

用于计算另一个表中用户结果的 MySQL 子查询是 sloooooooow

sql-server - 游标中的 sys.databases 跳过数据库

c# - 我应该只使用一个 new service() 还是更多?

c# - 重构嵌套类 - 移动到单独的文件 - visual studio 2008

c# - Visual Studio,如何自动插入参数名称标签?

sql - 如何基于列检查多个条件

sql-server - 将依赖项转换为指向 View 而不是 Table

sql-server - 为什么为 DATETIME 值定义加法运算符而不为 DATE 定义?