Entity framework 实体框架(Telerik)调用因ExecuteOnQuery对PostgreSQL存储过程失败

Entity framework 实体框架(Telerik)调用因ExecuteOnQuery对PostgreSQL存储过程失败,entity-framework,postgresql,stored-procedures,telerik,Entity Framework,Postgresql,Stored Procedures,Telerik,(PostgreSQL 9.1,Telerik OpenAccess v2.0.50727,PgAdmin III) 我很难从(Telerik)实体框架调用存储过程。确切的错误是: 用户代码未处理NpgsqlException 错误:42703:列“cpatient”不存在 Telerik模板化呼叫是: public int SaveDx(string cpatient, Object o, Object n) { OAParameter parameterCpatien

(PostgreSQL 9.1,Telerik OpenAccess v2.0.50727,PgAdmin III)

我很难从(Telerik)实体框架调用存储过程。确切的错误是:

用户代码未处理NpgsqlException

错误:42703:列“cpatient”不存在

Telerik模板化呼叫是:

public int SaveDx(string cpatient, Object o, Object n)
    {
        OAParameter parameterCpatient = new OAParameter();
        parameterCpatient.ParameterName = "cpatient";
        parameterCpatient.Size = -1;
        if(cpatient != null)
        {
            parameterCpatient.Value = cpatient;
        }   
        else
        {
            parameterCpatient.DbType = DbType.String;
            parameterCpatient.Value = DBNull.Value;
        }

        OAParameter parameterO = new OAParameter();
        parameterO.ParameterName = "o";
        parameterO.Value = o;

        OAParameter parameterN = new OAParameter();
        parameterN.ParameterName = "n";
        parameterN.Value = n;

        int queryResult = this.ExecuteNonQuery("SELECT * FROM \"public\".\"g_savedx\"(cpatient, o, n)", CommandType.Text, parameterCpatient, parameterO, parameterN);
    
        return queryResult;
    }
其中ExecuteOnQuery语句生成错误。PostgreSQL存储过程是:

  FUNCTION g_savedx(cpatient character varying, o view_dx, n view_dx)
  RETURNS void AS ...
postgreSQL函数已通过pgAdmin测试,可以正常工作

那么“cpatient”一栏是从哪里来的呢??我做错了什么


TIA

我永远无法让Telerik EntitiesModel ExecuteNonQuery在任何条件下工作。因此,建议的代码为:

        using (var cxt = new Nova.Data.Data())
        {
            cxt.SaveDx();
            cxt.SaveChanges();
        }
其中cxt.SaveDx()是postgresql g_SaveDx存储过程的域模型名,失败

我对PostgreSQL的最终解决方法是直接将Npgsql用作:

  public void SaveDx(View_dx dx, bool alldx = false)
    {
        using (var cxt = new Nova.Data.Data())
        {
            string connstring = cxt.Connection.ConnectionString;

            using (NpgsqlConnection conn = new NpgsqlConnection(connstring))
            {
                conn.Open();
                using (var cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "g_savedx";
                    cmd.CommandType = CommandType.StoredProcedure;
                    NpgsqlCommandBuilder.DeriveParameters(cmd);
                    cmd.Parameters["groupid"].Value = ....

                 var rowsAffected = cmd.ExecuteNonQuery();  
                }
            }
        }
    }
这样做时,只使用PostgreSQL过程接口中NpgsqlDbType枚举中定义的类型。(PostgreSQL可以使用复合类型,Npgsql没有那么多)

Telerik ExecuteOnQuery能够正常工作肯定会很好