【问题标题】:Silverlight WCF RIA Services. Check result of a boolean methodSilverlight WCF RIA 服务。检查布尔方法的结果
【发布时间】:2010-11-23 09:06:31
【问题描述】:

Silverlight 应用程序使用 WCF RIA 服务连接到 SQL Server 数据库。在向表中插入一堆新记录之前,我应该检查该表是否包含在其中一个字段中具有特定值的任何记录。

我在域服务类中的服务器端方法:

    [Invoke]
    public bool CheckRec(string nameFilter)
    {
        bool res = false;
        if (this.ObjectContext.MyTest.FirstOrDefault(p => p.Name == nameFilter) != null)
        {
            res = true;
        }            
        return res;
    }

如何在客户端检查方法结果? 我正在尝试以下方式,但需要一些帮助才能正确实施:

MyTestContext testcontext = new MyTestContext();
string tname =  savetdlg.TNameTBox.Text;
testcontext.CheckRec(tname).Completed += (df, fg) => 
                {
                    bool notunique = ?????? // how to get result of the method?
                    if (notunique == true)
                    {
                        //todo if record exists
                    }
                    else
                    {
                        //todo if record doesn't exist
                    }                   
                };

【问题讨论】:

  • 正交,但您的检查可以写成 return this.ObjectContext.MyTest.Any(p => p.Name == nameFilter);
  • 根据上下文和检查原因,您还可以将“if”检查添加到执行插入的服务器调用的开头。当然,如果您需要它是 2 个单独的调用(例如,要上传/写入的记录数量很大,而且您不需要编写它们很常见),那么没关系。 :)
  • 恕我直言,您不应该在操作开始后使用这种连接到已完成事件(或类似类型的事件) - 如果您要在“内联”中定义逻辑无论如何,lambda,只需调用允许您传入 Action> 的重载,恕我直言 :) 在操作已经开始后连接到“完成”,就像你故意添加一个竞争条件一样很容易避免,尽管我承认它不太可能被击中。

标签: c# silverlight wcf wcf-ria-services


【解决方案1】:

嗯,按以下方式完成:

MyTestContext testcontext = new MyTestContext();
string tname =  savetdlg.TNameTBox.Text;

testcontext.CheckRec(tname, context_CheckRecCompleted, null);

void context_CheckRecCompleted(InvokeOperation<bool> op)
    {
        bool notunique = op.Value;
        if (notunique == true)
        {
            //todo if record exists
        }
        else
        {
            //todo if record doesn't exist
        }
    }

【讨论】:

  • 只是好奇,为什么将第二个参数传递为 x => context_CheckRecCompleted(x) 而不仅仅是 context_CheckRecCompleted?并不是说它真的很重要,只是好奇:)
  • @James Manning 是的,你是对的。更正了代码。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多