diff --git a/src/EntityFramework.DynamicFilters.sln b/src/EntityFramework.DynamicFilters.sln index ba581e0..95434ed 100644 --- a/src/EntityFramework.DynamicFilters.sln +++ b/src/EntityFramework.DynamicFilters.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27004.2005 +# Visual Studio 14 +VisualStudioVersion = 14.0.25123.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EntityFramework.DynamicFilters", "EntityFramework.DynamicFilters\EntityFramework.DynamicFilters.csproj", "{56E36AD1-E675-42F0-96CB-7F475E05E491}" EndProject diff --git a/src/EntityFramework.DynamicFilters/DynamicFilterDefinition.cs b/src/EntityFramework.DynamicFilters/DynamicFilterDefinition.cs index df0c014..62b3146 100644 --- a/src/EntityFramework.DynamicFilters/DynamicFilterDefinition.cs +++ b/src/EntityFramework.DynamicFilters/DynamicFilterDefinition.cs @@ -6,7 +6,8 @@ namespace EntityFramework.DynamicFilters { - internal class DynamicFilterDefinition + [Serializable] + public class DynamicFilterDefinition { /// /// Unique ID assigned to each distinct filter. Used to find unique filters on an entity @@ -22,16 +23,24 @@ internal class DynamicFilterDefinition /// public string ColumnName { get; private set; } + + + [NonSerialized] + private LambdaExpression _predicate; + + /// /// Set if the filter is a LambdaExpression. Null if filter is a single column equality filter. - /// - public LambdaExpression Predicate { get; private set; } + /// + + public LambdaExpression Predicate { get { return _predicate; } private set { _predicate = value; } } public Type CLRType { get; private set; } public DynamicFilterOptions Options { get; private set; } - public string AttributeName { get { return string.Concat(DynamicFilterConstants.ATTRIBUTE_NAME_PREFIX, DynamicFilterConstants.DELIMETER, CLRType.Name, DynamicFilterConstants.DELIMETER, FilterName); } } + public string AttributeName { get { return DynamicFilterConstants.ATTRIBUTE_NAME_PREFIX; } } + internal DynamicFilterDefinition(Guid id, string filterName, LambdaExpression predicate, string columnName, Type clrType, DynamicFilterOptions options) { diff --git a/src/EntityFramework.DynamicFilters/DynamicFilterSerializer.cs b/src/EntityFramework.DynamicFilters/DynamicFilterSerializer.cs new file mode 100644 index 0000000..ecd9a4e --- /dev/null +++ b/src/EntityFramework.DynamicFilters/DynamicFilterSerializer.cs @@ -0,0 +1,31 @@ +using System; +using System.Data.Entity.Infrastructure; +using System.IO; +using System.Runtime.Serialization.Formatters.Binary; + +namespace EntityFramework.DynamicFilters +{ + internal class DynamicFilterSerializer : IMetadataAnnotationSerializer + { + public object Deserialize(string name, string value) + { + using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(value))) + { + var bf = new BinaryFormatter(); + + return (DynamicFilterDefinition)bf.Deserialize(ms); + } + } + + public string Serialize(string name, object value) + { + using (MemoryStream ms = new MemoryStream()) + { + var bf = new BinaryFormatter(); + bf.Serialize(ms, value); + + return Convert.ToBase64String(ms.ToArray()); + } + } + } +} \ No newline at end of file diff --git a/src/EntityFramework.DynamicFilters/EntityFramework.DynamicFilters.csproj b/src/EntityFramework.DynamicFilters/EntityFramework.DynamicFilters.csproj index 0cf4075..36caab5 100644 --- a/src/EntityFramework.DynamicFilters/EntityFramework.DynamicFilters.csproj +++ b/src/EntityFramework.DynamicFilters/EntityFramework.DynamicFilters.csproj @@ -40,10 +40,12 @@ - ..\packages\EntityFramework.6.1.1\lib\net40\EntityFramework.dll + ..\packages\EntityFramework.6.2.0\lib\net40\EntityFramework.dll + True - ..\packages\EntityFramework.6.1.1\lib\net40\EntityFramework.SqlServer.dll + ..\packages\EntityFramework.6.2.0\lib\net40\EntityFramework.SqlServer.dll + True @@ -66,7 +68,9 @@ + + diff --git a/src/EntityFramework.DynamicFilters/MyDbConfiguration.cs b/src/EntityFramework.DynamicFilters/MyDbConfiguration.cs new file mode 100644 index 0000000..ce39c81 --- /dev/null +++ b/src/EntityFramework.DynamicFilters/MyDbConfiguration.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Data.Entity; +using System.Data.Entity.Infrastructure; +using System.IO; +using System.Linq; +using System.Text; + +namespace EntityFramework.DynamicFilters +{ + public class MyDbConfiguration : DbConfiguration + { + public MyDbConfiguration() : base() + { + this.SetMetadataAnnotationSerializer("DynamicFilter", () => new DynamicFilterSerializer()); + this.SetModelStore(new DefaultDbModelStore(Directory.GetCurrentDirectory())); + } + } +} diff --git a/src/EntityFramework.DynamicFilters/packages.config b/src/EntityFramework.DynamicFilters/packages.config index 16578b4..c39c5f1 100644 --- a/src/EntityFramework.DynamicFilters/packages.config +++ b/src/EntityFramework.DynamicFilters/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file