Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/07/08 18:03:51 (16 years ago)
Author:
svonolfe
Message:

Added caching, thread safety to DataAccess layer (#372)

File:
1 edited

Legend:

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

    r899 r925  
    2626using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
    2727using HeuristicLab.Hive.Contracts.BusinessObjects;
     28using System.Runtime.CompilerServices;
    2829
    2930namespace HeuristicLab.Hive.Server.ADODataAccess {
    30   class ResourceAdapter: IResourceAdapter {
    31     #region IResourceAdapter Members
     31  class ResourceAdapter: DataAdapterBase, IResourceAdapter {
    3232    private dsHiveServerTableAdapters.ResourceTableAdapter adapter =
    33       new dsHiveServerTableAdapters.ResourceTableAdapter();
     33        new dsHiveServerTableAdapters.ResourceTableAdapter();
    3434
    35     private Resource Convert(dsHiveServer.ResourceRow row,
     35    private dsHiveServer.ResourceDataTable data =
     36        new dsHiveServer.ResourceDataTable();
     37
     38    public ResourceAdapter() {
     39      adapter.Fill(data);
     40    }
     41
     42    protected override void Update() {
     43      this.adapter.Update(this.data);
     44    }
     45
     46    private Resource Convert(dsHiveServer.ResourceRow row,
    3647      Resource resource) {
    3748      if (row != null && resource != null) {
     
    4354
    4455        return resource;
    45       } else 
     56      } else
    4657        return null;
    4758    }
     
    5768    }
    5869
     70    #region IResourceAdapter Members
     71    [MethodImpl(MethodImplOptions.Synchronized)]
    5972    public void UpdateResource(Resource resource) {
    6073      if (resource != null) {
    61         dsHiveServer.ResourceDataTable data =
    62           adapter.GetDataById(resource.ResourceId);
     74        dsHiveServer.ResourceRow row =
     75          data.FindByResourceId(resource.ResourceId);
    6376
    64         dsHiveServer.ResourceRow row;
    65         if (data.Count == 0) {
     77        if (row == null) {
    6678          row = data.NewResourceRow();
    6779          data.AddResourceRow(row);
    68         } else {
    69           row = data[0];
    70         }
     80
     81          //write row to db to get primary key
     82          adapter.Update(row);
     83        }
    7184
    7285        Convert(resource, row);
    73 
    74         adapter.Update(data);
    75 
    7686        resource.ResourceId = row.ResourceId;
    7787      }
    7888    }
    7989
    80     internal bool FillResource(Resource resource) {
     90    public bool GetResourceById(Resource resource) {
    8191      if (resource != null) {
    82         dsHiveServer.ResourceDataTable data =
    83           adapter.GetDataById(resource.ResourceId);
    84         if (data.Count == 1) {
    85           dsHiveServer.ResourceRow row =
    86             data[0];
     92        dsHiveServer.ResourceRow row =
     93          data.FindByResourceId(resource.ResourceId);
     94        if (row != null) {
    8795          Convert(row, resource);
    8896
     
    98106      resource.ResourceId = resourceId;
    99107
    100       if(FillResource(resource))
     108      if(GetResourceById(resource))
    101109        return resource;
    102110      else
     
    105113
    106114    public ICollection<Resource> GetAllResources() {
    107       ICollection<Resource> allResources =
     115      IList<Resource> allResources =
    108116        new List<Resource>();
    109 
    110       dsHiveServer.ResourceDataTable data =
    111           adapter.GetData();
    112 
     117     
    113118      foreach (dsHiveServer.ResourceRow row in data) {
    114119        Resource resource = new Resource();
     
    120125    }
    121126
     127    [MethodImpl(MethodImplOptions.Synchronized)]
    122128    public bool DeleteResource(Resource resource) {
    123129      if(resource != null) {
     130        dsHiveServer.ResourceRow row =
     131          data.FindByResourceId(resource.ResourceId);
    124132
    125         dsHiveServer.ResourceDataTable data =
    126            adapter.GetDataById(resource.ResourceId);
     133        if (row != null) {
     134          data.RemoveResourceRow(row);
    127135
    128         if (data.Count == 1) {
    129           dsHiveServer.ResourceRow row = data[0];
    130 
    131           row.Delete();
    132           return adapter.Update(data) > 0;
     136          return true;
    133137        }
    134138      }
Note: See TracChangeset for help on using the changeset viewer.