Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/14/09 21:27:54 (15 years ago)
Author:
svonolfe
Message:

fixed race condition issues, improved performance (#372)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/DataAdapterBase.cs

    r1128 r1131  
    2121
    2222using System;
     23using System.Data;
    2324using System.Collections.Generic;
    2425using System.Linq;
     
    3233    where RowT : System.Data.DataRow
    3334    where ObjT : IHiveObject, new() {
    34     protected AdapterT adapter =
    35       new AdapterT();
     35    protected AdapterT Adapter {
     36      get {
     37        return new AdapterT();
     38      }
     39    }
    3640
    3741    #region Abstract methods
    38     protected abstract RowT Convert(ObjT obj, RowT row);
     42    protected abstract RowT ConvertObj(ObjT obj, RowT row);
    3943
    40     protected abstract ObjT Convert(RowT row, ObjT obj);
     44    protected abstract ObjT ConvertRow(RowT row, ObjT obj);
    4145
    4246    [MethodImpl(MethodImplOptions.Synchronized)]
     
    4650    protected abstract void UpdateRow(RowT row);
    4751
    48     [MethodImpl(MethodImplOptions.Synchronized)]
    4952    protected abstract IEnumerable<RowT> FindById(long id);
    5053
    51     [MethodImpl(MethodImplOptions.Synchronized)]
    5254    protected abstract IEnumerable<RowT> FindAll();
    5355    #endregion
     
    5557    protected delegate IEnumerable<RowT> Selector();
    5658
    57     [MethodImpl(MethodImplOptions.Synchronized)]
     59    protected ObjT Convert(RowT row, ObjT obj) {
     60      try {
     61        obj = ConvertRow(row, obj);
     62        return obj;
     63      }
     64      catch (DeletedRowInaccessibleException) {
     65        return default(ObjT);
     66      }
     67      catch (RowNotInTableException) {
     68        return default(ObjT);
     69      }
     70    }
     71
    5872    protected virtual RowT FindSingleRow(Selector selector) {
    5973      RowT row = default(RowT);
     
    7387      if (row != null) {
    7488        ObjT obj = new ObjT();
    75         Convert(row, obj);
     89        obj = Convert(row, obj);
    7690
    7791        return obj;
     
    8195    }
    8296
    83     [MethodImpl(MethodImplOptions.Synchronized)]
    8497    protected virtual ICollection<ObjT> FindMultiple(Selector selector) {
    8598      IEnumerable<RowT> found =
     
    91104      foreach (RowT row in found) {
    92105        ObjT obj = new ObjT();
    93         Convert(row, obj);
    94         result.Add(obj);
     106        obj = Convert(row, obj);
     107        if(obj != null)
     108          result.Add(obj);
    95109      }
    96110
     
    115129        }
    116130
    117         Convert(obj, row);
     131        ConvertObj(obj, row);
    118132
    119133        UpdateRow(row);
Note: See TracChangeset for help on using the changeset viewer.