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

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

相关文章:

java - 动态sql生成设计

javascript - 强制 JSON.stringify 使用十进制表示法

javascript - 华丽的弹出式透明 png 为灰色

android - RecyclerView 项目有时无法正确显示,直到我滚动(仅在 Genymot

android - 在 Charles Proxy 中解码 RAW protobuf 数据

xslt - 我们如何使用 jenkins 控制台日志通过和失败计数生成 html 报告?

node.js - gulp 段错误 : 11 and Abort trap: 6 OSX Yose

angularjs - 在剑道下拉列表中选择 "0"作为值的项目

javascript - limitTo 过滤前查询过滤的 ng-repeat 数据的长度

objective-c - 动态计算自定义 UITableViewCell 的高度