浏览代码

Added little interface for a "QueryProvider"

Kenric Nugteren 8 月之前
父节点
当前提交
9e012ab90c

+ 15 - 0
InABox.Core/Client/Client.cs

@@ -60,6 +60,7 @@ namespace InABox.Clients
 
     public abstract class Client
     {
+
         public abstract CoreTable Query(IFilter? filter = null, IColumns? columns = null, ISortOrder? sortOrder = null, CoreRange? range = null);
         public abstract void Save(Entity entity, string auditNote);
         public abstract void Save(IEnumerable<Entity> entity, string auditNote);
@@ -366,6 +367,20 @@ namespace InABox.Clients
 
     public class Client<TEntity> : Client, IDisposable where TEntity : Entity, IRemotable, new()
     {
+        #region IQueryProvider
+
+        private class ClientQueryProvider : IQueryProvider<TEntity>
+        {
+            public CoreTable Query(Filter<TEntity>? filter = null, Columns<TEntity>? columns = null, SortOrder<TEntity>? sort = null, CoreRange? range = null)
+            {
+                return Client.Query(filter, columns, sort, range);
+            }
+        }
+
+        public static IQueryProvider<TEntity> Provider { get; private set; } = new ClientQueryProvider();
+
+        #endregion
+
         private IClient<TEntity> _client;
 
         public Client()

+ 11 - 0
InABox.Core/Client/IQueryProvider.cs

@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace InABox.Core
+{
+    public interface IQueryProvider<T>
+    {
+        CoreTable Query(Filter<T>? filter = null, Columns<T>? columns = null, SortOrder<T>? sort = null, CoreRange? range = null);
+    }
+}

+ 15 - 0
InABox.Database/IProvider.cs

@@ -107,4 +107,19 @@ public static class ProviderExtensions
             }
         }
     }
+
+    private class ProviderQueryProvider<TEntity>(IProvider provider) : IQueryProvider<TEntity>
+        where TEntity : Entity, new()
+    {
+        private IProvider Provider = provider;
+
+        public CoreTable Query(Filter<TEntity>? filter = null, Columns<TEntity>? columns = null, SortOrder<TEntity>? sort = null, CoreRange? range = null)
+        {
+            return Provider.Query(filter, columns, sort, range);
+        }
+    }
+    public static IQueryProvider<TEntity> QueryProvider<TEntity>(this IProvider provider) where TEntity : Entity, new()
+    {
+        return new ProviderQueryProvider<TEntity>(provider);
+    }
 }

+ 0 - 1
inabox.database.sqlite/SQLiteProvider.cs

@@ -1159,7 +1159,6 @@ public class SQLiteProviderFactory : IProviderFactory
 
     private void CheckFields(SQLiteWriteAccessor access, Type type, Dictionary<string, string> current_fields, CustomProperty[] customproperties)
     {
-        var name = type.Name;
         var type_fields = new Dictionary<string, string>();
         var view = type.GetCustomAttribute<AutoEntity>();
         LoadFields(type, type_fields);