我有两个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;
}
答案 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从大数据集中获取内容。
当然,这只适用于静态数据...