1: using System.Data;
2: using System.Linq;
3: using System.Collections.Generic;
4: using Microsoft.EntityFrameworkCore;
5: using System.Diagnostics;
6: using System;
7:
8: namespace Ia.Ngn.Cl.Model.Data.Maintenance
9: {
10: ////////////////////////////////////////////////////////////////////////////
11:
12: /// <summary publish="true">
13: /// Cache support class for the Next Generation Network data model
14: /// </summary>
15: ///
16: /// <remarks>
17: /// Copyright © 2006-2021 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
18: ///
19: /// This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
20: /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
21: ///
22: /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
23: /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
24: ///
25: /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
26: ///
27: /// Copyright notice: This notice may not be removed or altered from any source distribution.
28: /// </remarks>
29: public class Cache
30: {
31: private static Ia.Cl.Model.TimestampedList<string> serviceIdTimestampedList = new Ia.Cl.Model.TimestampedList<string>();
32:
33: private static readonly object objectLock = new object();
34:
35: ////////////////////////////////////////////////////////////////////////////
36:
37: /// <summary>
38: ///
39: /// </summary>
40: public Cache() { }
41:
42: ////////////////////////////////////////////////////////////////////////////
43:
44: /// <summary>
45: ///
46: /// </summary>
47: public static Ia.Cl.Model.TimestampedList<string> ServiceIdTimestampedList
48: {
49: get
50: {
51: lock (objectLock)
52: {
53: if (serviceIdTimestampedList.Timestamp <= Ia.Ngn.Cl.Model.Service2.LastCreateUpdateDelete || serviceIdTimestampedList.List.Count == 0)
54: {
55: using (var db = new Ia.Ngn.Cl.Model.Ngn())
56: {
57: serviceIdTimestampedList.List = (from s in db.Service2
58: select s.Id).AsNoTracking().ToList();
59:
60: serviceIdTimestampedList.Timestamp = DateTime.UtcNow.AddHours(3);
61: }
62: }
63:
64: return serviceIdTimestampedList;
65: }
66: }
67: }
68:
69: ////////////////////////////////////////////////////////////////////////////
70: ////////////////////////////////////////////////////////////////////////////
71: }
72:
73: ////////////////////////////////////////////////////////////////////////////
74: ////////////////////////////////////////////////////////////////////////////
75: }