2009-05-14 2 views
1

У меня есть два элемента управления ListView Asp.net, привязанные к двум различным элементам управления ObjectDataScource. Каждый контроль ODS ссылается на «MethodA» и «MethodB».Как установить возвращаемое значение одного объекта ObjectDataSource на основе другого объекта ObjectDataSource

Я хочу, чтобы «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

Я не думаю, что это легко возможно.

Вы можете отказаться от объекта ObjectDatasource и бросить его самостоятельно или взломать его.

Возможно использование статической переменной [ThreadLocal] в этом классе и пусть MethodA помещает значение в эту переменную? MethodB мог прочитать его.

И

[ThreadLocal] 
    private DataSet m_cachedAtoB=null; 

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

Вызов Reset() с самого начала вашей страницы, так что каждый поток, который перерабатывается ASP.NET не оставит старые устаревшие данные для следующего запроса. Я упоминал, что это взломать?

Лучшее решение: Похоже, что MethodB не принимает параметр. Итак, что бы это ни делало запросы MethodB, позвольте MethodA извлечь его и вставить в HttpCache.

Что я сделал, так это то, что мой backend returend довольно большой (10 таблиц) полный набор данных для веб-серверов со всеми статическими данными. Там у меня был класс, в котором были такие вещи, как ваш Мехтод и Мехтод. Но они всегда выбирали набор данных. GetDataSet() запросил cahce, и если он отсутствовал, запросил вебсервис и поместил его в cahce. Каждый из моих методов MethodA просто использовал LINQ для получения информации из большого набора данных.

Конечно, это работает только со статическими данными ...

+0

данные я использую не большой только сложно рассчитать, я хочу, чтобы избежать вычисления дважды для того же входного значения. Я думал о размещении данных для MethodB в сеансе. – TonyAbell

 Смежные вопросы

  • Нет связанных вопросов^_^