LINQ-to-SQL, incl рдореЗрдВ рдХреИрд╢рд┐рдВрдЧ рдбреЗрдЯрд╛ред рдФрд░ рдЕрд╢рдХреНрдд

рдореИрдВ рдЕрдкрдиреЗ ASP.NET рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдПрдХ рдХреИрд╢ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╣реИ, рджреВрд╕рд░реЗ рдореЗрдВ LINQ-SQL-SQL рдХреНрд╡реЗрд░реА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХреИрд╢рд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВред



рддреЛ, рдХрд╛рд░реНрдп: LINQ-to-SQL рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред



рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

1) рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдХреИрд╢рд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐ (ToList рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж ())

2) рдПрдХ рд░рд┐рдХреЙрд░реНрдб (FirstOrDefault ()) рдХреА рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐,

3) рдХреИрд╢ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╡рд┐рдзрд┐, рдЖрдкрдХреЛ рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рддрдХ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ

3) NULL рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред







рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:

1) рдХреИрд╢ рдореЗрдВ NULL рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ

2) FirstOrDefault () рди рдХреЗрд╡рд▓ рдиреБрд▓реНрд▓реЗрдмрд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╡реИрд▓реНрдпреВ рдЯрд╛рдЗрдкреНрд╕ (рдЗрдВрдЯ, рдбрдмрд▓, рдЖрджрд┐) рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред



рддреЛ, рдЪрд▓рд┐рдП рдХреИрд╢ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рд╛рд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  1. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  2. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  3. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  4. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  5. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  6. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  7. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  8. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  9. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  10. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  11. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  12. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  13. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  14. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  15. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  16. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  17. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  18. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  19. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  20. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  21. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  22. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  23. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  24. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  25. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  26. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  27. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  28. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  29. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  30. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  31. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  32. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  33. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  34. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  35. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  36. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



  37. public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .



public static class CacheStorage { internal static object Null = new Object(); public static object Get( string index) { return HttpContext .Current.Cache.Get(index); } public static CacheItem<T> Get<T>( string key) { CacheItem<T> result = new CacheItem<T> { Cached = false , Item = default (T) }; object obj = Get(key); if (obj != null ) { result.Cached = true ; result.Item = obj == CacheStorage.Null ? default (T) : (T)obj; } return result; } public static void Put( string key, object value ) { if ( value == null ) { value = CacheStorage.Null; } int expirationMinutes = 2; HttpContext .Current.Cache.Insert(key, value , null , DateTime .Now.AddMinutes(expirationMinutes), TimeSpan .Zero); } } public class CacheItem<T> { public T Item { get ; set ; } public bool Cached { get ; set ; } } * This source code was highlighted with Source Code Highlighter .





рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХреЗ рдХреИрд╢ рдФрд░ рд▓реЗрдЦрди рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ:





  1. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ ( рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдбреЗрдХреНрд╕)
  2. {
  3. рд╡рд╛рдкрд╕реА HttpContext .Current.Cache.Get (рд╕реВрдЪрдХрд╛рдВрдХ);
  4. }
  5. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рд╢реВрдиреНрдп рдкреБрдЯ ( рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреБрдВрдЬреА, рдСрдмреНрдЬреЗрдХреНрдЯ рдорд╛рди )
  6. {
  7. рдЕрдЧрд░ ( рдорд╛рди == рдЕрд╢рдХреНрдд )
  8. {
  9. рдореВрд▓реНрдп = CacheStorage.Null;
  10. }
  11. int expirationMinutes = 2;
  12. HttpContext .Current.Cache.Insert (рдХреБрдВрдЬреА, рдорд╛рди , рд╢реВрдиреНрдп , DateTime .Now.AddMinutes (рд╕рдорд╛рдкреНрддрд┐ рд╕рдордп), TimeSpan .Zero);
  13. }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╡рд┐рдзрд┐, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╢реЛрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рд░рд▓ рдХрд┐рдпрд╛ (рд╡рд┐рднрд┐рдиреНрди рдХреИрд╢ рдиреАрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдЖрдкрдиреЗ рд╢рд╛рдпрдж рджреЗрдЦрд╛ рдХрд┐ рдкреБрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рд╢рд░реНрдд рд╣реИ рдЬреЛ рд╢реВрдиреНрдп рдорд╛рди рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрддреА рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдХреИрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЬрдм рдпрд╣ рд╢рд░реНрдд рдкреВрд░реА рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рд╣рдо рдЗрд╕ рдорд╛рди рдХреЛ рдПрдХ рд╕реНрдЯрдм рд╕реЗ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ,





  1. рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рд░ рд╡рд╕реНрддреБ рдирд▓ = рдирдИ рд╡рд╕реНрддреБ ();
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдЬреЛ рдЕрд╢рдХреНрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЕрд╢рдХреНрдд рд╣реИ :)



рдХреИрд╢ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рди рдХреЗрд╡рд▓ рд╣рдорд╛рд░реА рдЬрд╝рд░реВрд░рдд рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ CacheItem рд╡рд╕реНрддреБ, рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдФрд░ рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рдЪрд┐рдиреНрд╣ рд╣реИ:





  1. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ CacheItem <T> <T> ( рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреБрдВрдЬреА) рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
  2. {
  3. CacheItem <T> рдкрд░рд┐рдгрд╛рдо = рдирдпрд╛ CacheItem <T>
  4. {
  5. рд╕рдВрдЪрд┐рдд = рдЭреВрдард╛
  6. рдЖрдЗрдЯрдо = рдбрд┐рдлрд╝реЙрд▓реНрдЯ (T)
  7. };
  8. рдСрдмреНрдЬреЗрдХреНрдЯ obj = Get (key);
  9. рдЕрдЧрд░ (obj! = null )
  10. {
  11. рдкрд░рд┐рдгрд╛рдо.рд╕рдВрд╕реНрдХреГрдд = рд╕рддреНрдп ;
  12. result.Item = obj == CacheStorage.Null? default (T): (T) obj;
  13. }
  14. рд╡рд╛рдкрд╕реА рдкрд░рд┐рдгрд╛рдо;
  15. }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдХреИрд╢рд┐рдЯреЗрдо рдХрд╣рд╛рдВ рд╣реИ





  1. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ CacheItem <T>
  2. {
  3. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЯреА рдЖрдЗрдЯрдо { рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ ; рд╕реЗрдЯ ; }
  4. рдкрдмреНрд▓рд┐рдХ рдмреВрд▓ рдХреИрд╢реНрдб { get ; рд╕реЗрдЯ ; }
  5. }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдпрд╣реА рд╣реИ, рдпрджрд┐ рд╢реВрдиреНрдп рдХреИрд╢ рдореЗрдВ рд╣реИ, рддреЛ рд╣рдо рдХреИрд╢ рдлрд╝реНрд▓реИрдЧ рдХреЛ рдЧрд▓рдд рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди (рдбрд┐рдлрд╝реЙрд▓реНрдЯ (T)) рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдХреИрд╢ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреИрд╢ рдлрд╝реНрд▓реИрдЧ рд╕рд╣реА рд╣реЛрдЧрд╛, рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░рд╛ рдирд▓ рд╕реНрдЯрдм рдХреИрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ, рдпрд╛ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдбрд╛рд▓реА рдЧрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВрдиреЗ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рдХрд╛рдо рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛, рдХреЛрдб рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИред



рдЕрдм LINQ-to-SQL рдХреНрд╡реЗрд░реА рдХреЛ рдХреИрд╢рд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ:





  1. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ QueryResultCache
  2. {
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ ToList рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЛ рдХреИрд╢ рдХрд░рддрд╛ рд╣реИ ():





  1. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рд╕реВрдЪреА <T> FromCache <T> ( рдпрд╣ IQueryable <T> рдХреНрд╡реЗрд░реА)
  2. рдкрд░рдореЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ [] рдкреИрд░рд╛рдореАрдЯрд░)
  3. {
  4. string key = QueryResultCache.GetKey (рдкреИрд░рд╛рдореАрдЯрд░);
  5. рд╕реВрдЪреА <T> рдкрд░рд┐рдгрд╛рдо = CacheStorage.Get (рдХреБрдВрдЬреА) рд╕реВрдЪреА <T> рдХреЗ рд░реВрдк рдореЗрдВ;
  6. рдЕрдЧрд░ (рдкрд░рд┐рдгрд╛рдо == рдЕрд╢рдХреНрдд )
  7. {
  8. рдкрд░рд┐рдгрд╛рдо = query.ToList ();
  9. CacheStorage.Put (рдХреБрдВрдЬреА, рдкрд░рд┐рдгрд╛рдо);
  10. }
  11. рд╡рд╛рдкрд╕реА рдкрд░рд┐рдгрд╛рдо;
  12. }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рджреВрд╕рд░реА рд╡рд┐рдзрд┐ FirstOrDefault () рдХреЛ рдХреЙрд▓ рдХреЛ рдХреИрд╢ рдХрд░рддреА рд╣реИ:





  1. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ T FirstOrDefaultFromCache <T> ( рдпрд╣ IQueryable <T> рдХреНрд╡реЗрд░реА)
  2. рдкрд░рдореЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ [] рдкреИрд░рд╛рдореАрдЯрд░)
  3. {
  4. string key = QueryResultCache.GetKey (рдкреИрд░рд╛рдореАрдЯрд░);
  5. CacheItem <T> рдкрд░рд┐рдгрд╛рдо = CacheStorage.Get <T> (рдХреБрдВрдЬреА);
  6. рдпрджрд┐ (рдкрд░рд┐рдгрд╛рдоред рдХреИрд╢реНрдб)
  7. {
  8. result.Item = query.FirstOrDefault ();
  9. CacheStorage.Put (рдХреБрдВрдЬреА, рдкрд░рд┐рдгрд╛рдоред Item);
  10. }
  11. рд╡рд╛рдкрд╕реА рдкрд░рд┐рдгрд╛рдо ред
  12. }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдпрд╣ рд╡рд┐рдзрд┐ рдХреИрд╢реЗрдЗрдо рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рд╢рд░реНрдорд┐рдВрджрдЧреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ (рдиреЛрдЯ: ToList рдХреЗ рд▓рд┐рдП) () рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╣рдореЗрд╢рд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд▓реМрдЯрд╛рддреА рд╣реИ; рдпрджрд┐ рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рд╢реВрдиреНрдп рд▓рдВрдмрд╛рдИ рдХрд╛ рд╣реЛрдЧрд╛)

рдХреИрд╢ рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдХреБрдВрдЬреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕реЗ рдПрдордбреА 5 рдореЗрдВ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреИрд╢рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдореЗрдВ рджрд┐рдП рдЧрдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ gluing рдХрд░рдХреЗ:





  1. рдирд┐рдЬреА рд╕реНрдерд┐рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЧреЗрдЯрдХреЗ ( рдСрдмреНрдЬреЗрдХреНрдЯ [] рдкреИрд░рд╛рдореАрдЯрд░)
  2. {
  3. рд╡рд╛рдкрд╕реА GetMD5 ( рд╕реНрдЯреНрд░рд┐рдВрдЧред рдЬреЙрдЗрди ( рд╕реНрдЯреНрд░рд┐рдВрдЧред рд░рд┐рдХреНрдд, рдкреИрд░рд╛рдореАрдЯрд░ред рдЪрдпрди) (x => x.ToStSt ())ред ToArray ()));
  4. }
  5. рдирд┐рдЬреА рд╕реНрдерд┐рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ GetMD5 ( рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдирдкреБрдЯ)
  6. {
  7. MD5 md5Hasher = MD5.Create ();
  8. рдмрд╛рдЗрдЯ [] рдбреЗрдЯрд╛ = md5Hasher.ComputeHash ( рдПрдиреНрдХреЛрдбрд┐рдВрдЧ .Default.GetBytes (рдЗрдирдкреБрдЯ));
  9. StringBuilder sBuilder = рдирдпрд╛ StringBuilder ();
  10. for ( int i = 0; рдореИрдВ <data.Length; i ++)
  11. {
  12. sBuilder.Append (рдбреЗрдЯрд╛ [i] .TStString ( "x2" ));
  13. }
  14. рд╡рд╛рдкрд╕реА sBuilder.ToString ();
  15. }
  16. }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдЕрдм рдЖрдк рдЗрди рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдХреИрд╢ рд▓рд┐рд╕реНрдЯ рдмрдирд╛рдПрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдЗрдВрдЯ рд╡реИрд▓реНрдпреВред рд╣рдо SQL рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ 2 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП SQL рд╕рд░реНрд╡рд░ рдЖрд░рд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред



рд╕рднреА рд╕реНрд░реЛрдд рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ (.net 4.0, web.config рдореЗрдВ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП SQL DB.sql рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ)ред



рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдФрд░ рдЖрд▓реЛрдЪрдирд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред



All Articles