Advertisement
Guest User

Untitled

a guest
Apr 25th, 2017
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.08 KB | None | 0 0
  1. public class BaseRepository<T> where T : Entity.BaseEntity, new()
  2.     {
  3.         protected readonly string filePath;
  4.  
  5.         public BaseRepository(string filePath)
  6.         {
  7.             this.filePath = filePath;
  8.         }
  9.  
  10.         private int GetNextId()
  11.         {
  12.             FileStream fs = new FileStream(this.filePath, FileMode.OpenOrCreate);
  13.             StreamReader sr = new StreamReader(fs);
  14.  
  15.             int id = 1;
  16.             try
  17.             {
  18.                 while (!sr.EndOfStream)
  19.                 {
  20.                     T item = new T();
  21.  
  22.                     PopulateEntity(sr, item);
  23.  
  24.                     if (id <= item.Id)
  25.                     {
  26.                         id = item.Id + 1;
  27.                     }
  28.                 }
  29.             }
  30.             finally
  31.             {
  32.                 sr.Close();
  33.                 fs.Close();
  34.             }
  35.  
  36.             return id;
  37.         }
  38.  
  39.         protected virtual void PopulateEntity(StreamReader sr, T item)
  40.         { }
  41.  
  42.         protected virtual void WriteEntity(StreamWriter sw, T item)
  43.         { }
  44.  
  45.         private void Insert(T item)
  46.         {
  47.             item.Id = GetNextId();
  48.  
  49.             FileStream fs = new FileStream(filePath, FileMode.Append);
  50.             StreamWriter sw = new StreamWriter(fs);
  51.  
  52.             try
  53.             {
  54.                 WriteEntity(sw, item);
  55.             }
  56.             finally
  57.             {
  58.                 sw.Close();
  59.                 fs.Close();
  60.             }
  61.         }
  62.  
  63.         private void Update(T item)
  64.         {
  65.             string tempFilePath = "temp." + filePath;
  66.  
  67.             FileStream ifs = new FileStream(filePath, FileMode.OpenOrCreate);
  68.             StreamReader sr = new StreamReader(ifs);
  69.  
  70.             FileStream ofs = new FileStream(tempFilePath, FileMode.OpenOrCreate);
  71.             StreamWriter sw = new StreamWriter(ofs);
  72.  
  73.             try
  74.             {
  75.                 while (!sr.EndOfStream)
  76.                 {
  77.                     T itemSrc = new T();
  78.                     PopulateEntity(sr, itemSrc);
  79.  
  80.                     if (itemSrc.Id != item.Id)
  81.                     {
  82.                         WriteEntity(sw, itemSrc);
  83.                     }
  84.                     else
  85.                     {
  86.                         WriteEntity(sw, item);
  87.                     }
  88.                 }
  89.             }
  90.             finally
  91.             {
  92.                 sw.Close();
  93.                 ofs.Close();
  94.                 sr.Close();
  95.                 ifs.Close();
  96.             }
  97.  
  98.             File.Delete(filePath);
  99.             File.Move(tempFilePath, filePath);
  100.         }
  101.  
  102.         public T GetById(int id)
  103.         {
  104.             FileStream fs = new FileStream(this.filePath, FileMode.OpenOrCreate);
  105.             StreamReader sr = new StreamReader(fs);
  106.  
  107.             try
  108.             {
  109.                 while (!sr.EndOfStream)
  110.                 {
  111.                     T item = new T();
  112.                     PopulateEntity(sr, item);
  113.  
  114.                     if (item.Id == id)
  115.                     {
  116.                         return item;
  117.                     }
  118.                 }
  119.             }
  120.             finally
  121.             {
  122.                 sr.Close();
  123.                 fs.Close();
  124.             }
  125.  
  126.             return null;
  127.         }
  128.  
  129.         public List<T> GetAll()
  130.         {
  131.             List<T> result = new List<T>();
  132.  
  133.             FileStream fs = new FileStream(this.filePath, FileMode.OpenOrCreate);
  134.             StreamReader sr = new StreamReader(fs);
  135.  
  136.             try
  137.             {
  138.                 while (!sr.EndOfStream)
  139.                 {
  140.                     T item = new T();
  141.                     PopulateEntity(sr, item);
  142.                     result.Add(item);
  143.                 }
  144.             }
  145.             finally
  146.             {
  147.                 sr.Close();
  148.                 fs.Close();
  149.             }
  150.  
  151.             return result;
  152.         }
  153.  
  154.         public void Delete(T item)
  155.         {
  156.             string tempFilePath = "temp." + filePath;
  157.  
  158.             FileStream ifs = new FileStream(filePath, FileMode.OpenOrCreate);
  159.             StreamReader sr = new StreamReader(ifs);
  160.  
  161.             FileStream ofs = new FileStream(tempFilePath, FileMode.OpenOrCreate);
  162.             StreamWriter sw = new StreamWriter(ofs);
  163.  
  164.             try
  165.             {
  166.                 while (!sr.EndOfStream)
  167.                 {
  168.                     T itemSrc = new T();
  169.                     PopulateEntity(sr, itemSrc);
  170.  
  171.                     if (itemSrc.Id != item.Id)
  172.                     {
  173.                         WriteEntity(sw, itemSrc);
  174.                     }
  175.                 }
  176.             }
  177.             finally
  178.             {
  179.                 sw.Close();
  180.                 ofs.Close();
  181.                 sr.Close();
  182.                 ifs.Close();
  183.             }
  184.  
  185.             File.Delete(filePath);
  186.             File.Move(tempFilePath, filePath);
  187.         }
  188.  
  189.         public void Save(T item)
  190.         {
  191.             if (item.Id > 0)
  192.             {
  193.                 Update(item);
  194.             }
  195.             else
  196.             {
  197.                 Insert(item);
  198.             }
  199.         }
  200.     }
  201. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement