如何基于另一个ObjectDataSource设置一个ObjectDataSource的返回值

时间:2009-05-14 22:15:41

标签: c# asp.net objectdatasource

我有两个Asp.net ListView控件绑定到两个不同的ObjectDataScource控件。每个ODS控件都引用'MethodA'和'MethodB'。

我希望'MethodA'调用数据库并返回'MethodA'和'MethodB'的数据。

我总是可以让'MethodB'再次调用数据库,但那样效率不高。

我不确定实现这一目标的最佳方法。

    [DataObjectMethod(DataObjectMethodType.Select)]
    public List<int> MethodA(int input)
    {
        List<int> a = new List<int>();
        List<string> b = new List<string>();
        ///
        /// Make one call to database
        /// returns: List<int> and List<string>
        /// set 'a' and 'b' values.

        return a;
    }
    [DataObjectMethod(DataObjectMethodType.Select)]
    public List<string> MethodB()
    {
        List<string> b = new List<string>();
        ///
        /// When MethodA is called set 'b'
        ///
        return b;
    }

1 个答案:

答案 0 :(得分:0)

我不认为这很容易实现。

您可以删除ObjectDatasource并自行滚动或破解它。

也许在该类中使用[ThreadLocal]静态变量,让MethodA将值放入该变量中? MethodB可以读它。

并且

  [ThreadLocal]
  private DataSet m_cachedAtoB=null;

  public static void Reset()
  {
     m_cachedAtoB=null;
  }

从页面开头调用Reset(),以便ASP.NET回收的每个线程都不会为下一个请求留下旧陈旧数据。我提到这是一个黑客攻击吗?

更好的解决方案: 似乎MethodB不接受参数。因此无论MethodB查询什么,让MethodA获取它并将其推送到HttpCache。

我所做的是我的后端使用所有静态数据向web服务器返回一个相当大(10个表)的完整数据集。在那里,我有一个课程,也有你的MehtodA和MehtodB。但他们总是提取数据集。 GetDataSet()查询了cahce,如果它缺少,则查询webservice并将其放入cahce中。我的每个MethodA方法都只使用LINQ从大数据集中获取内容。

当然,这只适用于静态数据...