请教Silverlight WCF RIA 调用存储过程问题

Yushangyuan 2012-02-17 06:39:08
在项目测试中,发现存储过程能正常执行(值能自增不为0),为什么我在客户端调用存储过程获取到返回值总是为0呢?

下面是具体的一些代码情况:

1、sql存储过程(用于更新获取记录值,返回值int用作其他表的主键):



CREATE PROCEDURE [dbo].[NEXT_VAL]
AS
BEGIN
BEGIN TRANSACTION
declare @NEXT_VAL INTEGER

SELECT @NEXT_VAL = VAL FROM SEQ_SEED UPDLOCK
UPDATE SEQ_SEED SET VAL= VAL + 1
SELECT @NEXT_VAL = VAL FROM SEQ_SEED
SELECT VAL as NEXT_VAL FROM SEQ_SEED
COMMIT
return @NEXT_VAL

END




2、存储过程已手动添加到.edmx模型中,生成的函数代码如下:


#region Function Imports

/// <summary>
/// No Metadata Documentation available.
/// </summary>
public ObjectResult<Nullable<global::System.Int32>> NEXT_VAL()
{
return base.ExecuteFunction<Nullable<global::System.Int32>>("NEXT_VAL");
}

#endregion


3、在Domain Service中添加的函数如下:


/// <summary>
/// 用于获取主键标识的函数(执行存储过程)
/// </summary>
/// <returns>主键</returns>
[Invoke]
public int GetNewId()
{
return Convert.ToInt32(this.ObjectContext.NEXT_VAL().FirstOrDefault());
}



4、在项目中测试,发现存储过程能正常执行(值能自增),但是GetNewId()获取到的返回值总是为0,而我想要的是自增后的值。


//客户端的调用
CallModelDomainContext myDomainContext = new CallModelDomainContext();

MessageBox.Show(myDomainContext.GetNewId().Value.ToString());



...全文
228 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yushangyuan 2012-02-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wwwljh 的回复:]

试试这样呢。
[Invoke]
public int GetNewId()
{
ObjectParameter parameter = new ObjectParameter("iNewID", typeof(int));
this.ObjectContext.NEXT_VAL(Nul……
[/Quote]

谢谢回答,嗯。我知道问题出在哪了,Silverlight里面是异步的。在这里那值调用前还没返回,不能这样直接获取。
wwwljh 2012-02-20
  • 打赏
  • 举报
回复
试试这样呢。
[Invoke]
public int GetNewId()
{
ObjectParameter parameter = new ObjectParameter("iNewID", typeof(int));
this.ObjectContext.NEXT_VAL(Nullable, parameter);
return Convert.ToInt32(parameter.Value);
}

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧