C# 如何基于另一个ObjectDataSource设置一个ObjectDataSource的返回值
我有两个Asp.net ListView控件绑定到两个不同的ObjectDataSource控件。每个ODS控件引用“MethodA”和“MethodB” 我希望“MethodA”对数据库进行一次调用,并返回“MethodA”和“MethodB”的数据 我可以让“MethodB”再次调用数据库,但这样做效率不高 我不确定实现这一目标的最佳方式C# 如何基于另一个ObjectDataSource设置一个ObjectDataSource的返回值,c#,asp.net,objectdatasource,C#,Asp.net,Objectdatasource,我有两个Asp.net ListView控件绑定到两个不同的ObjectDataSource控件。每个ODS控件引用“MethodA”和“MethodB” 我希望“MethodA”对数据库进行一次调用,并返回“MethodA”和“MethodB”的数据 我可以让“MethodB”再次调用数据库,但这样做效率不高 我不确定实现这一目标的最佳方式 [DataObjectMethod(DataObjectMethodType.Select)] public List<int>
[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;
}
[DataObjectMethod(DataObjectMethodType.Select)]
公共列表方法A(整数输入)
{
列表a=新列表();
列表b=新列表();
///
///对数据库进行一次调用
///返回:列表和列表
///设置“a”和“b”值。
返回a;
}
[DataObjectMethod(DataObjectMethodType.Select)]
公共列表方法B()
{
列表b=新列表();
///
///当MethodA被称为集合“b”时
///
返回b;
}
我认为这不容易做到
您可以删除ObjectDatasource并自己滚动它,也可以绕过它
也许在该类中使用[ThreadLocal]静态变量,然后让MethodA将值放入该变量中?方法B可以阅读它
和
[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,如果缺少,则查询Web服务并将其放入cahce。我的每个MethodA方法都只是使用LINQ从大数据集中获取数据
当然,这只适用于静态数据…我使用的数据不是很大,只是计算起来很复杂,我希望避免为同一输入值计算两次。我正在考虑将MethodB的数据放在会议中。