From fc6c03e8deaffcc9bc1e22cbb7edfb5d30e7157f Mon Sep 17 00:00:00 2001 From: ibaranov Date: Tue, 27 Nov 2018 16:26:13 +0300 Subject: [PATCH 1/3] Skip enum type if it does not have a special attribute "EnumLookupAttribute". Also added a new setting to enable this feature. EnumLookupOptions.Default.UseEnumsWithAttirbuteOnly() --- .../EnumLockupAttribute.cs | 10 ++++++++++ .../EnumLookupExtension.cs | 5 +++++ .../EnumLookupOptions.cs | 7 +++++++ 3 files changed, 22 insertions(+) create mode 100644 src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLockupAttribute.cs diff --git a/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLockupAttribute.cs b/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLockupAttribute.cs new file mode 100644 index 0000000..431f80b --- /dev/null +++ b/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLockupAttribute.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace SpatialFocus.EntityFrameworkCore.Extensions +{ + public class EnumLookupAttribute : Attribute + { + } +} diff --git a/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupExtension.cs b/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupExtension.cs index eae0bd8..755e9b2 100644 --- a/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupExtension.cs +++ b/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupExtension.cs @@ -26,6 +26,11 @@ public static void ConfigureEnumLookup(this ModelBuilder modelBuilder, EnumLooku continue; } + if (enumOptions.useEnumsWithAttirbutesOnly && !propertyType.GetCustomAttributes(true).Contains(new EnumLookupAttribute())) + { + continue; + } + IMutableEntityType entityType = property.DeclaringEntityType; Type concreteType = enumOptions.UseNumberLookup diff --git a/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupOptions.cs b/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupOptions.cs index 4719ddb..4fd8acc 100644 --- a/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupOptions.cs +++ b/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupOptions.cs @@ -21,6 +21,7 @@ public static EnumLookupOptions Default EnumLookupOptions enumOptions = new EnumLookupOptions(); enumOptions.SetNamingScheme(NamingScheme.SnakeCase); enumOptions.UseNumberLookup = true; + enumOptions.useEnumsWithAttirbutesOnly = false; return enumOptions; } @@ -29,6 +30,7 @@ public static EnumLookupOptions Default internal Func NamingFunction => name => this.postProcessingTableNamingFunction(this.namingFunction(name)); internal bool UseNumberLookup { get; private set; } + internal bool useEnumsWithAttirbutesOnly { get; private set; } public EnumLookupOptions Pluralize() { @@ -58,6 +60,11 @@ public EnumLookupOptions UseNumberAsIdentifier() return this; } + public EnumLookupOptions UseEnumsWithAttirbuteOnly(){ + useEnumsWithAttirbutesOnly = true; + return this; + } + public EnumLookupOptions UseStringAsIdentifier() { UseNumberLookup = false; From 65d3ea003a71a8b61b917043cb65c887d0837c7a Mon Sep 17 00:00:00 2001 From: ibaranov Date: Tue, 27 Nov 2018 16:39:38 +0300 Subject: [PATCH 2/3] change check --- .../EnumLookupExtension.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupExtension.cs b/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupExtension.cs index 755e9b2..f8015d3 100644 --- a/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupExtension.cs +++ b/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupExtension.cs @@ -26,7 +26,7 @@ public static void ConfigureEnumLookup(this ModelBuilder modelBuilder, EnumLooku continue; } - if (enumOptions.useEnumsWithAttirbutesOnly && !propertyType.GetCustomAttributes(true).Contains(new EnumLookupAttribute())) + if (enumOptions.useEnumsWithAttirbutesOnly && propertyType.GetCustomAttributes(typeof(EnumLookupAttribute), inherit: true).Length == 0) { continue; } From 9441d89d8b97f872bd9263534008036af7a63490 Mon Sep 17 00:00:00 2001 From: Christoph Perger Date: Tue, 27 Nov 2018 15:21:36 +0100 Subject: [PATCH 3/3] Minor changes (typos, code style) --- .../EnumLockupAttribute.cs | 10 ---------- .../EnumLookupAttribute.cs | 13 +++++++++++++ .../EnumLookupExtension.cs | 5 ++--- .../EnumLookupOptions.cs | 15 +++++++++------ ...ialFocus.EntityFrameworkCore.Extensions.csproj | 2 +- 5 files changed, 25 insertions(+), 20 deletions(-) delete mode 100644 src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLockupAttribute.cs create mode 100644 src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupAttribute.cs diff --git a/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLockupAttribute.cs b/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLockupAttribute.cs deleted file mode 100644 index 431f80b..0000000 --- a/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLockupAttribute.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace SpatialFocus.EntityFrameworkCore.Extensions -{ - public class EnumLookupAttribute : Attribute - { - } -} diff --git a/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupAttribute.cs b/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupAttribute.cs new file mode 100644 index 0000000..e9196f0 --- /dev/null +++ b/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupAttribute.cs @@ -0,0 +1,13 @@ +// +// Copyright (c) Spatial Focus. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +namespace SpatialFocus.EntityFrameworkCore.Extensions +{ + using System; + + public class EnumLookupAttribute : Attribute + { + } +} \ No newline at end of file diff --git a/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupExtension.cs b/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupExtension.cs index f8015d3..0bbc2f3 100644 --- a/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupExtension.cs +++ b/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupExtension.cs @@ -26,7 +26,7 @@ public static void ConfigureEnumLookup(this ModelBuilder modelBuilder, EnumLooku continue; } - if (enumOptions.useEnumsWithAttirbutesOnly && propertyType.GetCustomAttributes(typeof(EnumLookupAttribute), inherit: true).Length == 0) + if (enumOptions.UseEnumsWithAttributesOnly && !propertyType.GetCustomAttributes(typeof(EnumLookupAttribute), true).Any()) { continue; } @@ -42,8 +42,7 @@ public static void ConfigureEnumLookup(this ModelBuilder modelBuilder, EnumLooku string tableName = enumOptions.NamingFunction(typeName); enumLookupBuilder.ToTable(tableName); - string keyName = enumOptions.UseNumberLookup - ? nameof(EnumWithNumberLookup.Id) + string keyName = enumOptions.UseNumberLookup ? nameof(EnumWithNumberLookup.Id) : nameof(EnumWithStringLookup.Id); modelBuilder.Entity(entityType.Name).HasOne(concreteType).WithMany().HasPrincipalKey(keyName).HasForeignKey(property.Name); diff --git a/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupOptions.cs b/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupOptions.cs index 4fd8acc..b930592 100644 --- a/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupOptions.cs +++ b/src/SpatialFocus.EntityFrameworkCore.Extensions/EnumLookupOptions.cs @@ -21,7 +21,7 @@ public static EnumLookupOptions Default EnumLookupOptions enumOptions = new EnumLookupOptions(); enumOptions.SetNamingScheme(NamingScheme.SnakeCase); enumOptions.UseNumberLookup = true; - enumOptions.useEnumsWithAttirbutesOnly = false; + enumOptions.UseEnumsWithAttributesOnly = false; return enumOptions; } @@ -29,8 +29,9 @@ public static EnumLookupOptions Default internal Func NamingFunction => name => this.postProcessingTableNamingFunction(this.namingFunction(name)); + internal bool UseEnumsWithAttributesOnly { get; private set; } + internal bool UseNumberLookup { get; private set; } - internal bool useEnumsWithAttirbutesOnly { get; private set; } public EnumLookupOptions Pluralize() { @@ -53,15 +54,17 @@ public EnumLookupOptions Singularize() return this; } - public EnumLookupOptions UseNumberAsIdentifier() + public EnumLookupOptions UseEnumsWithAttributeOnly() { - UseNumberLookup = true; + UseEnumsWithAttributesOnly = true; return this; } - public EnumLookupOptions UseEnumsWithAttirbuteOnly(){ - useEnumsWithAttirbutesOnly = true; + public EnumLookupOptions UseNumberAsIdentifier() + { + UseNumberLookup = true; + return this; } diff --git a/src/SpatialFocus.EntityFrameworkCore.Extensions/SpatialFocus.EntityFrameworkCore.Extensions.csproj b/src/SpatialFocus.EntityFrameworkCore.Extensions/SpatialFocus.EntityFrameworkCore.Extensions.csproj index 68d4fb9..1c28406 100644 --- a/src/SpatialFocus.EntityFrameworkCore.Extensions/SpatialFocus.EntityFrameworkCore.Extensions.csproj +++ b/src/SpatialFocus.EntityFrameworkCore.Extensions/SpatialFocus.EntityFrameworkCore.Extensions.csproj @@ -1,7 +1,7 @@  - 1.0.0 + 1.1.0 SpatialFocus.EntityFrameworkCore.Extensions Spatial Focus EntityFrameworkCore Extensions A set of useful extensions for EntityFrameworkCore (Enum Lookup Tables, Naming of tables / properties / keys, Pluralize).