diff --git a/Builder/IISMainHandler/build.txt b/Builder/IISMainHandler/build.txt index 14d9c90..7237be0 100644 --- a/Builder/IISMainHandler/build.txt +++ b/Builder/IISMainHandler/build.txt @@ -1 +1 @@ -1969 \ No newline at end of file +1971 \ No newline at end of file diff --git a/FLocal.Common/dataobjects/Post.cs b/FLocal.Common/dataobjects/Post.cs index 93ebe65..3bbd102 100644 --- a/FLocal.Common/dataobjects/Post.cs +++ b/FLocal.Common/dataobjects/Post.cs @@ -28,7 +28,10 @@ namespace FLocal.Common.dataobjects { public static readonly TableSpec instance = new TableSpec(); public string name { get { return TABLE; } } public string idName { get { return FIELD_ID; } } - public void refreshSqlObject(int id) { Refresh(id); } + public void refreshSqlObject(int id) { + Refresh(id); + LoadById(id).latestRevision_Reset(); + } } protected override ISqlObjectTableSpec table { get { return TableSpec.instance; } } @@ -70,31 +73,39 @@ namespace FLocal.Common.dataobjects { return this._revision; } } + + private readonly object latestRevision_locker = new object(); public Revision latestRevision { get { - return Revision.LoadById( - int.Parse( - Config.instance.mainConnection.LoadIdsByConditions( - Revision.TableSpec.instance, - new ComplexCondition( - ConditionsJoinType.AND, - new ComparisonCondition( - Revision.TableSpec.instance.getColumnSpec(Revision.TableSpec.FIELD_POSTID), - ComparisonType.EQUAL, - this.id.ToString() + return Cache.instance.get( + this.latestRevision_locker, + () => Revision.LoadById( + int.Parse( + Config.instance.mainConnection.LoadIdsByConditions( + Revision.TableSpec.instance, + new ComplexCondition( + ConditionsJoinType.AND, + new ComparisonCondition( + Revision.TableSpec.instance.getColumnSpec(Revision.TableSpec.FIELD_POSTID), + ComparisonType.EQUAL, + this.id.ToString() + ), + new ComparisonCondition( + Revision.TableSpec.instance.getColumnSpec(Revision.TableSpec.FIELD_NUMBER), + ComparisonType.EQUAL, + this.revision.Value.ToString() + ) ), - new ComparisonCondition( - Revision.TableSpec.instance.getColumnSpec(Revision.TableSpec.FIELD_NUMBER), - ComparisonType.EQUAL, - this.revision.Value.ToString() - ) - ), - Diapasone.unlimited - ).Single() + Diapasone.unlimited + ).Single() + ) ) ); } } + internal void latestRevision_Reset() { + Cache.instance.delete(this.latestRevision_locker); + } private int _layerId; public int layerId {