diff --git a/ElCamino.AspNetCore.Identity.AzureTable.sln b/ElCamino.AspNetCore.Identity.AzureTable.sln
index 86ed090..8953596 100644
--- a/ElCamino.AspNetCore.Identity.AzureTable.sln
+++ b/ElCamino.AspNetCore.Identity.AzureTable.sln
@@ -21,6 +21,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElCamino.AspNetCore.Identit
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElCamino.AspNetCore.Identity.AzureTable.Model", "src\ElCamino.AspNetCore.Identity.AzureTable.Model\ElCamino.AspNetCore.Identity.AzureTable.Model.csproj", "{C90FB0E3-5BE2-41E7-9DA3-9083C7700F91}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElCamino.Azure.Data.Tables", "src\ElCamino.Azure.Data.Tables\ElCamino.Azure.Data.Tables.csproj", "{DAF57676-8534-4A62-BC7B-317753F2A275}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -58,6 +60,12 @@ Global
{C90FB0E3-5BE2-41E7-9DA3-9083C7700F91}.Release|Any CPU.Build.0 = Release|Any CPU
{C90FB0E3-5BE2-41E7-9DA3-9083C7700F91}.Signed|Any CPU.ActiveCfg = Debug|Any CPU
{C90FB0E3-5BE2-41E7-9DA3-9083C7700F91}.Signed|Any CPU.Build.0 = Debug|Any CPU
+ {DAF57676-8534-4A62-BC7B-317753F2A275}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DAF57676-8534-4A62-BC7B-317753F2A275}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DAF57676-8534-4A62-BC7B-317753F2A275}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DAF57676-8534-4A62-BC7B-317753F2A275}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DAF57676-8534-4A62-BC7B-317753F2A275}.Signed|Any CPU.ActiveCfg = Debug|Any CPU
+ {DAF57676-8534-4A62-BC7B-317753F2A275}.Signed|Any CPU.Build.0 = Debug|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/README.md b/README.md
index 66def15..288d2d0 100644
--- a/README.md
+++ b/README.md
@@ -1,27 +1,9 @@
-identityazuretable
+ElCamino.Azure.Data.Tables
==================
-This project provides a high performance cloud solution for ASP.NET Identity Core using Azure Table storage replacing the Entity Framework / MSSQL provider.
+Azure Table Storage odata query building and operators from the older Azure Storage SDKs and some other async, mapping, and batch helpers and/or extensions.
[![Build Status](https://dev.azure.com/elcamino/Azure%20OpenSource/_apis/build/status/IdentityAzureTableCore?branchName=master)](https://dev.azure.com/elcamino/Azure%20OpenSource/_build/latest?definitionId=4&branchName=master)
-[![NuGet Badge](https://buildstats.info/nuget/ElCamino.AspNetCore.Identity.AzureTable)](https://www.nuget.org/packages/ElCamino.AspNetCore.Identity.AzureTable/)
-[![NuGet Badge](https://buildstats.info/nuget/ElCamino.AspNet.Identity.AzureTable)](https://www.nuget.org/packages/ElCamino.AspNet.Identity.AzureTable/)
+[![NuGet Badge](https://buildstats.info/nuget/ElCamino.Azure.Data.Tables)](https://www.nuget.org/packages/ElCamino.Azure.Data.Tables/)
Project site at https://dlmelendez.github.io/identityazuretable/.
-
-Identity Core latest template
-```
-dotnet new --install ElCamino.AspNetCore.Identity.AzureTable.Templates
-
-#MVC Template
-dotnet new mvc-id-azure-tables
-
-#Razor Pages Template
-dotnet new rzp-id-azure-tables
-```
-
-Identity Core 3.x (uses PageModel - latest) - Use ElCamino.AspNetCore.Identity.AzureTable, sample mvc app: https://github.com/dlmelendez/identityazuretable/tree/master/sample/samplemvccore4
-
-Identity Core 2.x (uses PageModel - latest) - Use ElCamino.AspNetCore.Identity.AzureTable, sample mvc app: https://github.com/dlmelendez/identityazuretable/tree/master/sample/samplemvccore3
-
-Identity Core 2.x (uses MVC - older) - Use ElCamino.AspNetCore.Identity.AzureTable, sample mvc app: https://github.com/dlmelendez/identityazuretable/tree/master/sample/samplemvccore2
diff --git a/src/ElCamino.AspNetCore.Identity.AzureTable/ElCamino.AspNetCore.Identity.AzureTable.csproj b/src/ElCamino.AspNetCore.Identity.AzureTable/ElCamino.AspNetCore.Identity.AzureTable.csproj
index 94b2213..cfe84ec 100644
--- a/src/ElCamino.AspNetCore.Identity.AzureTable/ElCamino.AspNetCore.Identity.AzureTable.csproj
+++ b/src/ElCamino.AspNetCore.Identity.AzureTable/ElCamino.AspNetCore.Identity.AzureTable.csproj
@@ -6,7 +6,7 @@
Azure Table Storage Provider for ASP.NET Identity Core
David Melendez
netstandard2.0;net6.0
- 9.0
+ 10.0
ElCamino.AspNetCore.Identity.AzureTable
../../tools/Key.snk
true
@@ -57,6 +57,7 @@
+
diff --git a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/AzureSdkHelper.cs b/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/AzureSdkHelper.cs
deleted file mode 100644
index cf68dc1..0000000
--- a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/AzureSdkHelper.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-// MIT License Copyright 2020 (c) David Melendez. All rights reserved. See License.txt in the project root for license information.
-
-using ElCamino.AspNetCore.Identity.AzureTable.Helpers;
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Threading.Tasks;
-
-namespace Azure.Data.Tables
-{
- public static class AzureSdkHelper
- {
- //Azure SDK changes, you are still killing me.
- public static async IAsyncEnumerable ExecuteQueryAsync(this TableClient ct, TableQuery tq)
- where T : class, ITableEntity, new()
- {
-#if DEBUG
- int iCounter = 0;
-#endif
-
- AsyncPageable segment = ct.QueryAsync(tq.FilterString, tq.TakeCount, tq.SelectColumns);
- await foreach (T result in segment.ConfigureAwait(false))
- {
-#if DEBUG
- iCounter++;
-#endif
- yield return result;
- }
-
-#if DEBUG
- Debug.WriteLine("ExecuteQueryAsync: (Count): {0}", iCounter);
- Debug.WriteLine("ExecuteQueryAsync (Query): " + tq.FilterString);
-#endif
- }
-
- }
-}
diff --git a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/EdmType.cs b/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/EdmType.cs
deleted file mode 100644
index 1a0acbe..0000000
--- a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/EdmType.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace ElCamino.AspNetCore.Identity.AzureTable.Helpers
-{
- public enum EdmType
- {
- Binary,
- Boolean,
- DateTime,
- Double,
- Guid,
- Int32,
- Int64,
- String
-
- }
-}
diff --git a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/QueryComparisons.cs b/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/QueryComparisons.cs
deleted file mode 100644
index 0b83e20..0000000
--- a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/QueryComparisons.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace ElCamino.AspNetCore.Identity.AzureTable.Helpers
-{
- public static class QueryComparisons
- {
- ///
- /// Represents the Equal operator.
- ///
- public const string Equal = "eq";
-
- ///
- /// Represents the Not Equal operator.
- ///
- public const string NotEqual = "ne";
-
- ///
- /// Represents the Greater Than operator.
- ///
- public const string GreaterThan = "gt";
-
- ///
- /// Represents the Greater Than or Equal operator.
- ///
- public const string GreaterThanOrEqual = "ge";
-
- ///
- /// Represents the Less Than operator.
- ///
- public const string LessThan = "lt";
-
- ///
- /// Represents the Less Than or Equal operator.
- ///
- public const string LessThanOrEqual = "le";
- }
-}
diff --git a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/TableOperators.cs b/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/TableOperators.cs
deleted file mode 100644
index d6c30e2..0000000
--- a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/TableOperators.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace ElCamino.AspNetCore.Identity.AzureTable.Helpers
-{
- ///
- /// From https://github.com/Azure/azure-storage-net/blob/v9.3.2/Lib/Common/Table/TableOperators.cs
- ///
- public static class TableOperators
- {
- public const string And = "and";
-
- ///
- /// Represents the Not operator.
- ///
- public const string Not = "not";
-
- ///
- /// Represents the Or operator.
- ///
- public const string Or = "or";
- }
-}
diff --git a/src/ElCamino.AspNetCore.Identity.AzureTable/IdentityCloudContext.cs b/src/ElCamino.AspNetCore.Identity.AzureTable/IdentityCloudContext.cs
index 15838b3..d8a8ba2 100644
--- a/src/ElCamino.AspNetCore.Identity.AzureTable/IdentityCloudContext.cs
+++ b/src/ElCamino.AspNetCore.Identity.AzureTable/IdentityCloudContext.cs
@@ -1,7 +1,7 @@
// MIT License Copyright 2020 (c) David Melendez. All rights reserved. See License.txt in the project root for license information.
using System;
-using ElCamino.AspNetCore.Identity.AzureTable.Model;
using Azure.Data.Tables;
+using ElCamino.AspNetCore.Identity.AzureTable.Model;
namespace ElCamino.AspNetCore.Identity.AzureTable
{
diff --git a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/BatchOperationHelper.cs b/src/ElCamino.Azure.Data.Tables/BatchOperationHelper.cs
similarity index 92%
rename from src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/BatchOperationHelper.cs
rename to src/ElCamino.Azure.Data.Tables/BatchOperationHelper.cs
index 49ff5e7..36bdd96 100644
--- a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/BatchOperationHelper.cs
+++ b/src/ElCamino.Azure.Data.Tables/BatchOperationHelper.cs
@@ -1,89 +1,83 @@
-// MIT License Copyright 2020 (c) David Melendez. All rights reserved. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-using Azure;
-using Azure.Data.Tables;
-
-namespace ElCamino.AspNetCore.Identity.AzureTable.Helpers
-{
- ///
- /// Used to instantiate multiple TableBatchOperations when the
- /// TableOperation maximum is reached on a single TableBatchOperation
- ///
- public class BatchOperationHelper
- {
-
- private readonly Dictionary> _batches = new();
-
- private readonly TableClient _table;
- public BatchOperationHelper(TableClient table)
- {
- _table = table;
- }
-
- public virtual void AddEntities(IEnumerable entities) where T : class, ITableEntity, new()
- {
- foreach(T entity in entities)
- {
- AddEntity(entity);
- }
- }
- public virtual void AddEntity(T entity) where T : class, ITableEntity, new()
- {
- GetCurrent(entity.PartitionKey).Add(new TableTransactionAction(TableTransactionActionType.Add, entity));
- }
- public virtual void DeleteEntity(string partitionKey, string rowKey, ETag ifMatch = default)
- {
- GetCurrent(partitionKey).Add(new TableTransactionAction(TableTransactionActionType.Delete, new TableEntity(partitionKey, rowKey),ifMatch));
- }
-
- public virtual async Task> SubmitBatchAsync(CancellationToken cancellationToken = default)
- {
- ConcurrentBag bag = new ConcurrentBag();
- List batches = new List(_batches.Count);
- foreach(KeyValuePair> kv in _batches)
- {
- batches.Add(_table.SubmitTransactionAsync(kv.Value, cancellationToken)
- .ContinueWith((result) =>
- {
- foreach (var r in result.Result.Value)
- {
- bag.Add(r);
- }
- }, cancellationToken));
- }
- await Task.WhenAll(batches).ConfigureAwait(false);
- Clear();
- return bag;
- }
-
- public virtual void UpdateEntity(T entity, ETag ifMatch, TableUpdateMode mode = TableUpdateMode.Merge) where T : class, ITableEntity, new()
- {
- GetCurrent(entity.PartitionKey).Add(new TableTransactionAction(mode == TableUpdateMode.Merge? TableTransactionActionType.UpdateMerge : TableTransactionActionType.UpdateReplace, entity, ifMatch));
- }
-
- public virtual void UpsertEntity(T entity, TableUpdateMode mode = TableUpdateMode.Merge) where T : class, ITableEntity, new()
- {
- GetCurrent(entity.PartitionKey).Add(new TableTransactionAction(mode == TableUpdateMode.Merge ? TableTransactionActionType.UpsertMerge : TableTransactionActionType.UpsertReplace, entity));
- }
-
- public void Clear()
- {
- _batches.Clear();
- }
-
- private List GetCurrent(string partitionKey)
- {
- if(!_batches.ContainsKey(partitionKey))
- {
- _batches.Add(partitionKey, new List());
- }
-
- return _batches[partitionKey];
- }
- }
-}
+// MIT License Copyright 2020 (c) David Melendez. All rights reserved. See License.txt in the project root for license information.
+
+using System.Collections.Concurrent;
+
+namespace Azure.Data.Tables
+{
+ ///
+ /// Used to instantiate multiple TableBatchOperations when the
+ /// TableOperation maximum is reached on a single TableBatchOperation
+ ///
+ public class BatchOperationHelper
+ {
+ private readonly Dictionary> _batches = new();
+
+ private readonly TableClient _table;
+
+ public BatchOperationHelper(TableClient table)
+ {
+ _table = table;
+ }
+
+ public virtual void AddEntities(IEnumerable entities) where T : class, ITableEntity, new()
+ {
+ foreach(T entity in entities)
+ {
+ AddEntity(entity);
+ }
+ }
+ public virtual void AddEntity(T entity) where T : class, ITableEntity, new()
+ {
+ GetCurrent(entity.PartitionKey).Add(new TableTransactionAction(TableTransactionActionType.Add, entity));
+ }
+ public virtual void DeleteEntity(string partitionKey, string rowKey, ETag ifMatch = default)
+ {
+ GetCurrent(partitionKey).Add(new TableTransactionAction(TableTransactionActionType.Delete, new TableEntity(partitionKey, rowKey),ifMatch));
+ }
+
+ public virtual async Task> SubmitBatchAsync(CancellationToken cancellationToken = default)
+ {
+ ConcurrentBag bag = new ConcurrentBag();
+ List batches = new List(_batches.Count);
+ foreach(KeyValuePair> kv in _batches)
+ {
+ batches.Add(_table.SubmitTransactionAsync(kv.Value, cancellationToken)
+ .ContinueWith((result) =>
+ {
+ foreach (var r in result.Result.Value)
+ {
+ bag.Add(r);
+ }
+ }, cancellationToken));
+ }
+ await Task.WhenAll(batches).ConfigureAwait(false);
+ Clear();
+ return bag;
+ }
+
+ public virtual void UpdateEntity(T entity, ETag ifMatch, TableUpdateMode mode = TableUpdateMode.Merge) where T : class, ITableEntity, new()
+ {
+ GetCurrent(entity.PartitionKey).Add(new TableTransactionAction(mode == TableUpdateMode.Merge? TableTransactionActionType.UpdateMerge : TableTransactionActionType.UpdateReplace, entity, ifMatch));
+ }
+
+ public virtual void UpsertEntity(T entity, TableUpdateMode mode = TableUpdateMode.Merge) where T : class, ITableEntity, new()
+ {
+ GetCurrent(entity.PartitionKey).Add(new TableTransactionAction(mode == TableUpdateMode.Merge ? TableTransactionActionType.UpsertMerge : TableTransactionActionType.UpsertReplace, entity));
+ }
+
+ public void Clear()
+ {
+ _batches.Clear();
+ }
+
+ private List GetCurrent(string partitionKey)
+ {
+ if(!_batches.ContainsKey(partitionKey))
+ {
+ _batches.Add(partitionKey, new List());
+ }
+
+ return _batches[partitionKey];
+ }
+ }
+}
diff --git a/src/ElCamino.Azure.Data.Tables/EdmType.cs b/src/ElCamino.Azure.Data.Tables/EdmType.cs
new file mode 100644
index 0000000..9204e94
--- /dev/null
+++ b/src/ElCamino.Azure.Data.Tables/EdmType.cs
@@ -0,0 +1,36 @@
+// -----------------------------------------------------------------------------------------
+//
+// Copyright 2013 Microsoft Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// -----------------------------------------------------------------------------------------
+
+
+namespace Azure.Data.Tables
+{
+ ///
+ /// From https://github.com/Azure/azure-storage-net/blob/v9.3.2/Lib/Common/Table/EdmType.cs
+ ///
+ public enum EdmType
+ {
+ Binary,
+ Boolean,
+ DateTime,
+ Double,
+ Guid,
+ Int32,
+ Int64,
+ String
+
+ }
+}
diff --git a/src/ElCamino.Azure.Data.Tables/ElCamino.Azure.Data.Tables.csproj b/src/ElCamino.Azure.Data.Tables/ElCamino.Azure.Data.Tables.csproj
new file mode 100644
index 0000000..df8ca97
--- /dev/null
+++ b/src/ElCamino.Azure.Data.Tables/ElCamino.Azure.Data.Tables.csproj
@@ -0,0 +1,51 @@
+
+
+
+ Azure Table Storage odata query building and operators from the older Azure Storage SDKs and some other async, mapping, and batch helpers and/or extensions.
+ Copyright © 2022 David Melendez, MIT License
+ Azure Table Storage Extensions
+ David Melendez
+ netstandard2.0;net6.0
+ 10.0
+ ElCamino.Azure.Data.Tables
+ ../../tools/Key.snk
+ true
+ true
+ ElCamino.Azure.Data.Tables
+ ASP.NET;Azure;Table Storage;Azure.Data.Tables
+ Check https://github.com/dlmelendez/identityazuretable/releases for the latest release information.
+ projectNugetPic.png
+
+ true
+ git
+ https://github.com/dlmelendez/identityazuretable.git
+ True
+ 6.1
+ https://dlmelendez.github.io/identityazuretable
+
+
+ MIT
+ true
+ snupkg
+ README.md
+ en-US
+ enable
+ disable
+
+
+
+
+ \
+ True
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/EntityMapHelper.cs b/src/ElCamino.Azure.Data.Tables/EntityMapExtensions.cs
similarity index 85%
rename from src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/EntityMapHelper.cs
rename to src/ElCamino.Azure.Data.Tables/EntityMapExtensions.cs
index f8a3115..8b14f5a 100644
--- a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/EntityMapHelper.cs
+++ b/src/ElCamino.Azure.Data.Tables/EntityMapExtensions.cs
@@ -1,18 +1,12 @@
// MIT License Copyright 2020 (c) David Melendez. All rights reserved. See License.txt in the project root for license information.
-using Azure.Data.Tables;
-using System;
using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
-using System.Text;
-using System.Threading.Tasks;
-namespace ElCamino.AspNetCore.Identity.AzureTable.Helpers
+namespace Azure.Data.Tables
{
- public static class EntityMapHelper
+ public static class EntityMapExtensions
{
private static readonly ConcurrentDictionary TypeProperties = new();
diff --git a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/IAsyncEnumerableExtensions.cs b/src/ElCamino.Azure.Data.Tables/IAsyncEnumerableExtensions.cs
similarity index 73%
rename from src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/IAsyncEnumerableExtensions.cs
rename to src/ElCamino.Azure.Data.Tables/IAsyncEnumerableExtensions.cs
index b86702f..62a1510 100644
--- a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/IAsyncEnumerableExtensions.cs
+++ b/src/ElCamino.Azure.Data.Tables/IAsyncEnumerableExtensions.cs
@@ -1,11 +1,8 @@
// MIT License Copyright 2020 (c) David Melendez. All rights reserved. See License.txt in the project root for license information.
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
+using System.Diagnostics;
-namespace ElCamino.AspNetCore.Identity.AzureTable
+namespace Azure.Data.Tables
{
public static class IAsyncEnumerableExtensions
{
@@ -53,5 +50,27 @@ public static async Task AnyAsync(
await using var enumerator = asyncEnumerable.GetAsyncEnumerator(cancellationToken);
return await enumerator.MoveNextAsync().ConfigureAwait(false);
}
+
+ public static async IAsyncEnumerable ExecuteQueryAsync(this TableClient ct, TableQuery tq)
+ where T : class, ITableEntity, new()
+ {
+#if DEBUG
+ int iCounter = 0;
+#endif
+
+ AsyncPageable segment = ct.QueryAsync(tq.FilterString, tq.TakeCount, tq.SelectColumns);
+ await foreach (T result in segment.ConfigureAwait(false))
+ {
+#if DEBUG
+ iCounter++;
+#endif
+ yield return result;
+ }
+
+#if DEBUG
+ Debug.WriteLine("ExecuteQueryAsync: (Count): {0}", iCounter);
+ Debug.WriteLine("ExecuteQueryAsync (Query): " + tq.FilterString);
+#endif
+ }
}
}
diff --git a/src/ElCamino.Azure.Data.Tables/QueryComparisons.cs b/src/ElCamino.Azure.Data.Tables/QueryComparisons.cs
new file mode 100644
index 0000000..14acf48
--- /dev/null
+++ b/src/ElCamino.Azure.Data.Tables/QueryComparisons.cs
@@ -0,0 +1,56 @@
+// -----------------------------------------------------------------------------------------
+//
+// Copyright 2013 Microsoft Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// -----------------------------------------------------------------------------------------
+
+
+namespace Azure.Data.Tables
+{
+ ///
+ /// From https://github.com/Azure/azure-storage-net/blob/v9.3.2/Lib/Common/Table/QueryComparisons.cs
+ ///
+ public static class QueryComparisons
+ {
+ ///
+ /// Represents the Equal operator.
+ ///
+ public const string Equal = "eq";
+
+ ///
+ /// Represents the Not Equal operator.
+ ///
+ public const string NotEqual = "ne";
+
+ ///
+ /// Represents the Greater Than operator.
+ ///
+ public const string GreaterThan = "gt";
+
+ ///
+ /// Represents the Greater Than or Equal operator.
+ ///
+ public const string GreaterThanOrEqual = "ge";
+
+ ///
+ /// Represents the Less Than operator.
+ ///
+ public const string LessThan = "lt";
+
+ ///
+ /// Represents the Less Than or Equal operator.
+ ///
+ public const string LessThanOrEqual = "le";
+ }
+}
diff --git a/src/ElCamino.Azure.Data.Tables/TableOperators.cs b/src/ElCamino.Azure.Data.Tables/TableOperators.cs
new file mode 100644
index 0000000..34d52f4
--- /dev/null
+++ b/src/ElCamino.Azure.Data.Tables/TableOperators.cs
@@ -0,0 +1,37 @@
+// -----------------------------------------------------------------------------------------
+//
+// Copyright 2013 Microsoft Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// -----------------------------------------------------------------------------------------
+
+namespace Azure.Data.Tables
+{
+ ///
+ /// From https://github.com/Azure/azure-storage-net/blob/v9.3.2/Lib/Common/Table/TableOperators.cs
+ ///
+ public static class TableOperators
+ {
+ public const string And = "and";
+
+ ///
+ /// Represents the Not operator.
+ ///
+ public const string Not = "not";
+
+ ///
+ /// Represents the Or operator.
+ ///
+ public const string Or = "or";
+ }
+}
diff --git a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/TableQuery.cs b/src/ElCamino.Azure.Data.Tables/TableQuery.cs
similarity index 90%
rename from src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/TableQuery.cs
rename to src/ElCamino.Azure.Data.Tables/TableQuery.cs
index 183eb61..3d779fc 100644
--- a/src/ElCamino.AspNetCore.Identity.AzureTable/Helpers/Odata/TableQuery.cs
+++ b/src/ElCamino.Azure.Data.Tables/TableQuery.cs
@@ -1,11 +1,31 @@
-using System;
+// -----------------------------------------------------------------------------------------
+//
+// Copyright 2013 Microsoft Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// -----------------------------------------------------------------------------------------
+
+using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Text;
-namespace ElCamino.AspNetCore.Identity.AzureTable.Helpers
+namespace Azure.Data.Tables
{
+ ///
+ /// From https://github.com/Azure/azure-storage-net/blob/v9.3.2/Lib/Common/Table/TableQuery.cs
+ ///
public class TableQuery
{
public int? TakeCount { get; set; }
diff --git a/src/ElCamino.Azure.Data.Tables/projectNugetPic.png b/src/ElCamino.Azure.Data.Tables/projectNugetPic.png
new file mode 100644
index 0000000..223ba4a
Binary files /dev/null and b/src/ElCamino.Azure.Data.Tables/projectNugetPic.png differ