实体框架 - 不支持“ColumnName”列的类型。类型是'对象'

时间:2015-07-13 18:05:25

标签: 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>();

它给了我错误

  

不支持“SelectedValue”列的类型。类型是'对象'。

相同的部署代码仍在其他服务器上运行,没有任何问题。不确定我的电脑有什么变化!!

我的表类型定义:

    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有关。

1 个答案:

答案 0 :(得分:0)

我在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; }
    }