返回从 PostgreSQL 更新到 Telerik Entity Framework 的记录数
Returning number of records updated to Telerik Entity Framework from PostgreSQL
我在 PostgreSQL 中有一个存储过程定义为:
CREATE OR REPLACE FUNCTION g_changename(oldname character varying, newname character varying)
RETURNS integer AS
$BODY$
declare
k integer :=0;
begin
UPDATE test SET name = WHERE name = ;
GET DIAGNOSTICS k = ROW_COUNT;
return k;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION g_changename(character varying, character varying)
OWNER TO postgres;
存储过程正确测试return
时更新的记录数
Select g_changename('a','b');
在 PgAdmin 中执行。当调用 Telerik DataAccess 以更新数据库中的域时,它会将其编译为:
[MappedFunctionAttribute(Name="\"public\".\"g_changename\"", IsDeterministic=false, Backend=Backend.PostgreSql)]
public static Int32 ChangeName(string oldname, string newname)
{
throw new NotImplementedException();
}
从我读过的所有内容来看,这似乎是合适的。但是,您将如何编写调用它的方法?
这失败了,因为它调用了未实现的静态过程:
public int ChangeName(string OldName, string NewName)
{
var x = Nova.Data.Data.ChangeName(OldName, NewName);
return x;
}
而且我不知道如何使用 'MappedFunctionAttribute' 引用的 Telerik 元数据。
任何帮助将不胜感激,因为我已经为此苦苦挣扎了好几天。
似乎只能在 LINQ 语句中调用使用标量 returns 定义的存储过程——而且只能使用非常量参数。所以我能解决这个问题的最简单方法是完全绕过模板方法(未实现)并直接进入数据库:
public int ChangeName(string OldName, string NewName)
{
using (var ctx = new Nova.Data.Data())
{
OAParameter p1 = new OAParameter();
p1.ParameterName = "oldname";
p1.Value = OldName;
OAParameter p2 = new OAParameter();
p2.ParameterName = "newname";
p2.Value = NewName;
IList<Int32> rslt =
ctx.ExecuteQuery<Int32>("g_changename", CommandType.StoredProcedure, p1, p2);
ctx.SaveChanges();
return rslt[0];
}
}
有人有更好的主意吗?
我在 PostgreSQL 中有一个存储过程定义为:
CREATE OR REPLACE FUNCTION g_changename(oldname character varying, newname character varying)
RETURNS integer AS
$BODY$
declare
k integer :=0;
begin
UPDATE test SET name = WHERE name = ;
GET DIAGNOSTICS k = ROW_COUNT;
return k;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION g_changename(character varying, character varying)
OWNER TO postgres;
存储过程正确测试return
时更新的记录数Select g_changename('a','b');
在 PgAdmin 中执行。当调用 Telerik DataAccess 以更新数据库中的域时,它会将其编译为:
[MappedFunctionAttribute(Name="\"public\".\"g_changename\"", IsDeterministic=false, Backend=Backend.PostgreSql)]
public static Int32 ChangeName(string oldname, string newname)
{
throw new NotImplementedException();
}
从我读过的所有内容来看,这似乎是合适的。但是,您将如何编写调用它的方法?
这失败了,因为它调用了未实现的静态过程:
public int ChangeName(string OldName, string NewName)
{
var x = Nova.Data.Data.ChangeName(OldName, NewName);
return x;
}
而且我不知道如何使用 'MappedFunctionAttribute' 引用的 Telerik 元数据。
任何帮助将不胜感激,因为我已经为此苦苦挣扎了好几天。
似乎只能在 LINQ 语句中调用使用标量 returns 定义的存储过程——而且只能使用非常量参数。所以我能解决这个问题的最简单方法是完全绕过模板方法(未实现)并直接进入数据库:
public int ChangeName(string OldName, string NewName)
{
using (var ctx = new Nova.Data.Data())
{
OAParameter p1 = new OAParameter();
p1.ParameterName = "oldname";
p1.Value = OldName;
OAParameter p2 = new OAParameter();
p2.ParameterName = "newname";
p2.Value = NewName;
IList<Int32> rslt =
ctx.ExecuteQuery<Int32>("g_changename", CommandType.StoredProcedure, p1, p2);
ctx.SaveChanges();
return rslt[0];
}
}
有人有更好的主意吗?