Guest User

Untitled

a guest
Jul 16th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.66 KB | None | 0 0
  1. namespace Data
  2. {
  3. public class TestDbSet<TEntity> : DbSet<TEntity>, IQueryable, IEnumerable<TEntity>, IDbAsyncEnumerable<TEntity>
  4. where TEntity : class
  5. {
  6. ObservableCollection<TEntity> _data;
  7. IQueryable _query;
  8.  
  9. public TestDbSet()
  10. {
  11. _data = new ObservableCollection<TEntity>();
  12. _query = _data.AsQueryable();
  13. }
  14.  
  15. public override TEntity Add(TEntity item)
  16. {
  17. _data.Add(item);
  18. return item;
  19. }
  20.  
  21. public override TEntity Remove(TEntity item)
  22. {
  23. _data.Remove(item);
  24. return item;
  25. }
  26.  
  27. public override TEntity Attach(TEntity item)
  28. {
  29. _data.Add(item);
  30. return item;
  31. }
  32.  
  33. public override TEntity Create()
  34. {
  35. return Activator.CreateInstance<TEntity>();
  36. }
  37.  
  38. public override TDerivedEntity Create<TDerivedEntity>()
  39. {
  40. return Activator.CreateInstance<TDerivedEntity>();
  41. }
  42.  
  43. public override ObservableCollection<TEntity> Local
  44. {
  45. get { return _data; }
  46. }
  47.  
  48. Type IQueryable.ElementType
  49. {
  50. get { return _query.ElementType; }
  51. }
  52.  
  53. Expression IQueryable.Expression
  54. {
  55. get { return _query.Expression; }
  56. }
  57.  
  58. IQueryProvider IQueryable.Provider
  59. {
  60. get { return new TestDbAsyncQueryProvider<TEntity>(_query.Provider); }
  61. }
  62.  
  63. System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
  64. {
  65. return _data.GetEnumerator();
  66. }
  67.  
  68. IEnumerator<TEntity> IEnumerable<TEntity>.GetEnumerator()
  69. {
  70. return _data.GetEnumerator();
  71. }
  72.  
  73. IDbAsyncEnumerator<TEntity> IDbAsyncEnumerable<TEntity>.GetAsyncEnumerator()
  74. {
  75. return new TestDbAsyncEnumerator<TEntity>(_data.GetEnumerator());
  76. }
  77. }
  78.  
  79. internal class TestDbAsyncQueryProvider<TEntity> : IDbAsyncQueryProvider
  80. {
  81. private readonly IQueryProvider _inner;
  82.  
  83. internal TestDbAsyncQueryProvider(IQueryProvider inner)
  84. {
  85. _inner = inner;
  86. }
  87.  
  88. public IQueryable CreateQuery(Expression expression)
  89. {
  90. return new TestDbAsyncEnumerable<TEntity>(expression);
  91. }
  92.  
  93. public IQueryable<TElement> CreateQuery<TElement>(Expression expression)
  94. {
  95. return new TestDbAsyncEnumerable<TElement>(expression);
  96. }
  97.  
  98. public object Execute(Expression expression)
  99. {
  100. return _inner.Execute(expression);
  101. }
  102.  
  103. public TResult Execute<TResult>(Expression expression)
  104. {
  105. return _inner.Execute<TResult>(expression);
  106. }
  107.  
  108. public Task<object> ExecuteAsync(Expression expression, CancellationToken cancellationToken)
  109. {
  110. return Task.FromResult(Execute(expression));
  111. }
  112.  
  113. public Task<TResult> ExecuteAsync<TResult>(Expression expression, CancellationToken cancellationToken)
  114. {
  115. return Task.FromResult(Execute<TResult>(expression));
  116. }
  117. }
  118.  
  119. internal class TestDbAsyncEnumerable<T> : EnumerableQuery<T>, IDbAsyncEnumerable<T>, IQueryable<T>
  120. {
  121. public TestDbAsyncEnumerable(IEnumerable<T> enumerable)
  122. : base(enumerable)
  123. { }
  124.  
  125. public TestDbAsyncEnumerable(Expression expression)
  126. : base(expression)
  127. { }
  128.  
  129. public IDbAsyncEnumerator<T> GetAsyncEnumerator()
  130. {
  131. return new TestDbAsyncEnumerator<T>(this.AsEnumerable().GetEnumerator());
  132. }
  133.  
  134. IDbAsyncEnumerator IDbAsyncEnumerable.GetAsyncEnumerator()
  135. {
  136. return GetAsyncEnumerator();
  137. }
  138.  
  139. IQueryProvider IQueryable.Provider
  140. {
  141. get { return new TestDbAsyncQueryProvider<T>(this); }
  142. }
  143. }
  144.  
  145. internal class TestDbAsyncEnumerator<T> : IDbAsyncEnumerator<T>
  146. {
  147. private readonly IEnumerator<T> _inner;
  148.  
  149. public TestDbAsyncEnumerator(IEnumerator<T> inner)
  150. {
  151. _inner = inner;
  152. }
  153.  
  154. public void Dispose()
  155. {
  156. _inner.Dispose();
  157. }
  158.  
  159. public Task<bool> MoveNextAsync(CancellationToken cancellationToken)
  160. {
  161. return Task.FromResult(_inner.MoveNext());
  162. }
  163.  
  164. public T Current
  165. {
  166. get { return _inner.Current; }
  167. }
  168.  
  169. object IDbAsyncEnumerator.Current
  170. {
  171. get { return Current; }
  172. }
  173. }
  174. }
Add Comment
Please, Sign In to add comment