22using Microsoft . EntityFrameworkCore . Metadata . Builders ;
33using Thinktecture . EntityFrameworkCore . Parameters ;
44using Thinktecture . EntityFrameworkCore . TempTables ;
5+ using Thinktecture . Internal ;
56
67// ReSharper disable once CheckNamespace
78namespace Thinktecture ;
@@ -12,59 +13,111 @@ namespace Thinktecture;
1213public static class BulkOperationsModelBuilderExtensions
1314{
1415 /// <summary>
15- /// Introduces and configures a temp table .
16+ /// Introduces and configures a scalar parameter .
1617 /// </summary>
1718 /// <param name="modelBuilder">A model builder.</param>
18- /// <param name="isKeyless">Indication whether the entity has a key or not .</param>
19- /// <typeparam name="T">Type of the temp table .</typeparam>
19+ /// <param name="buildAction">An action that performs configuration of the entity type .</param>
20+ /// <typeparam name="T">Type of the column .</typeparam>
2021 /// <returns>An entity type builder for further configuration.</returns>
2122 /// <exception cref="ArgumentNullException"><paramref name="modelBuilder"/> is <c>null</c>.</exception>
22- public static EntityTypeBuilder < T > ConfigureTempTableEntity < T > ( this ModelBuilder modelBuilder , bool isKeyless = true )
23+ public static void ConfigureScalarCollectionParameter < T > (
24+ this ModelBuilder modelBuilder ,
25+ Action < EntityTypeBuilder < ScalarCollectionParameter < T > > > ? buildAction = null )
26+ {
27+ var builder = modelBuilder . SharedTypeEntity < ScalarCollectionParameter < T > > ( EntityNameProvider . GetCollectionParameterName ( typeof ( T ) , true ) )
28+ . ToTable ( typeof ( ScalarCollectionParameter < T > ) . ShortDisplayName ( ) ,
29+ static tableBuilder => tableBuilder . ExcludeFromMigrations ( ) )
30+ . HasNoKey ( ) ;
31+
32+ buildAction ? . Invoke ( builder ) ;
33+ }
34+
35+ /// <summary>
36+ /// Introduces and configures a complex parameter.
37+ /// </summary>
38+ /// <param name="modelBuilder">A model builder.</param>
39+ /// <param name="buildAction">An action that performs configuration of the entity type.</param>
40+ /// <typeparam name="T">Type of the parameter.</typeparam>
41+ /// <returns>An entity type builder for further configuration.</returns>
42+ /// <exception cref="ArgumentNullException"><paramref name="modelBuilder"/> is <c>null</c>.</exception>
43+ public static void ConfigureComplexCollectionParameter < T > (
44+ this ModelBuilder modelBuilder ,
45+ Action < EntityTypeBuilder < T > > ? buildAction = null )
2346 where T : class
2447 {
25- return modelBuilder . ConfigureTempTableInternal < T > ( isKeyless ) ;
48+ var builder = modelBuilder . SharedTypeEntity < T > ( EntityNameProvider . GetCollectionParameterName ( typeof ( T ) , false ) ) ;
49+
50+ builder . ToTable ( typeof ( T ) . ShortDisplayName ( ) ,
51+ static tableBuilder => tableBuilder . ExcludeFromMigrations ( ) )
52+ . HasNoKey ( ) ;
53+
54+ buildAction ? . Invoke ( builder ) ;
2655 }
2756
2857 /// <summary>
29- /// Introduces and configures a scalar parameter .
58+ /// Introduces and configures a keyless temp table .
3059 /// </summary>
3160 /// <param name="modelBuilder">A model builder.</param>
32- /// <typeparam name="T">Type of the column.</typeparam>
61+ /// <param name="buildAction">An action that performs configuration of the entity type.</param>
62+ /// <typeparam name="T">Type of the temp table.</typeparam>
3363 /// <returns>An entity type builder for further configuration.</returns>
3464 /// <exception cref="ArgumentNullException"><paramref name="modelBuilder"/> is <c>null</c>.</exception>
35- public static EntityTypeBuilder < ScalarCollectionParameter < T > > ConfigureScalarCollectionParameter < T > ( this ModelBuilder modelBuilder )
65+ public static void ConfigureTempTableEntity < T > (
66+ this ModelBuilder modelBuilder ,
67+ Action < EntityTypeBuilder < T > > ? buildAction )
68+ where T : class
3669 {
37- return modelBuilder . Entity < ScalarCollectionParameter < T > > ( )
38- . ToTable ( typeof ( ScalarCollectionParameter < T > ) . ShortDisplayName ( ) ,
39- tableBuilder => tableBuilder . ExcludeFromMigrations ( ) )
40- . HasNoKey ( ) ;
70+ ConfigureTempTableEntity ( modelBuilder , true , buildAction ) ;
4171 }
4272
4373 /// <summary>
44- /// Introduces and configures a complex parameter .
74+ /// Introduces and configures a temp table .
4575 /// </summary>
4676 /// <param name="modelBuilder">A model builder.</param>
47- /// <typeparam name="T">Type of the parameter.</typeparam>
77+ /// <param name="isKeyless">Indication whether the entity has a key or not.</param>
78+ /// <param name="buildAction">An action that performs configuration of the entity type.</param>
79+ /// <typeparam name="T">Type of the temp table.</typeparam>
4880 /// <returns>An entity type builder for further configuration.</returns>
4981 /// <exception cref="ArgumentNullException"><paramref name="modelBuilder"/> is <c>null</c>.</exception>
50- public static EntityTypeBuilder < T > ConfigureComplexCollectionParameter < T > ( this ModelBuilder modelBuilder )
82+ public static void ConfigureTempTableEntity < T > (
83+ this ModelBuilder modelBuilder ,
84+ bool isKeyless = true ,
85+ Action < EntityTypeBuilder < T > > ? buildAction = null )
5186 where T : class
5287 {
53- return modelBuilder . Entity < T > ( )
54- . ToTable ( typeof ( T ) . ShortDisplayName ( ) ,
55- tableBuilder => tableBuilder . ExcludeFromMigrations ( ) )
56- . HasNoKey ( ) ;
88+ var builder = modelBuilder . ConfigureTempTableInternal < T > ( isKeyless ) ;
89+
90+ buildAction ? . Invoke ( builder ) ;
91+ }
92+
93+ /// <summary>
94+ /// Introduces and configures a keyless temp table.
95+ /// </summary>
96+ /// <param name="modelBuilder">A model builder.</param>
97+ /// <param name="buildAction">An action that performs configuration of the entity type.</param>
98+ /// <typeparam name="TColumn1">Type of the column.</typeparam>
99+ /// <returns>An entity type builder for further configuration.</returns>
100+ /// <exception cref="ArgumentNullException"><paramref name="modelBuilder"/> is <c>null</c>.</exception>
101+ public static void ConfigureTempTable < TColumn1 > (
102+ this ModelBuilder modelBuilder ,
103+ Action < EntityTypeBuilder < TempTable < TColumn1 > > > ? buildAction )
104+ {
105+ ConfigureTempTable ( modelBuilder , true , buildAction ) ;
57106 }
58107
59108 /// <summary>
60109 /// Introduces and configures a temp table.
61110 /// </summary>
62111 /// <param name="modelBuilder">A model builder.</param>
63112 /// <param name="isKeyless">Indication whether the entity has a key or not.</param>
113+ /// <param name="buildAction">An action that performs configuration of the entity type.</param>
64114 /// <typeparam name="TColumn1">Type of the column.</typeparam>
65115 /// <returns>An entity type builder for further configuration.</returns>
66116 /// <exception cref="ArgumentNullException"><paramref name="modelBuilder"/> is <c>null</c>.</exception>
67- public static EntityTypeBuilder < TempTable < TColumn1 > > ConfigureTempTable < TColumn1 > ( this ModelBuilder modelBuilder , bool isKeyless = true )
117+ public static void ConfigureTempTable < TColumn1 > (
118+ this ModelBuilder modelBuilder ,
119+ bool isKeyless = true ,
120+ Action < EntityTypeBuilder < TempTable < TColumn1 > > > ? buildAction = null )
68121 {
69122 var builder = modelBuilder . ConfigureTempTableInternal < TempTable < TColumn1 > > ( isKeyless ) ;
70123
@@ -74,19 +127,39 @@ public static EntityTypeBuilder<TempTable<TColumn1>> ConfigureTempTable<TColumn1
74127 builder . Property ( t => t . Column1 ) . ValueGeneratedNever ( ) ;
75128 }
76129
77- return builder ;
130+ buildAction ? . Invoke ( builder ) ;
131+ }
132+
133+ /// <summary>
134+ /// Introduces and configures a keyless temp table.
135+ /// </summary>
136+ /// <param name="modelBuilder">A model builder.</param>
137+ /// <param name="buildAction">An action that performs configuration of the entity type.</param>
138+ /// <typeparam name="TColumn1">Type of the column 1.</typeparam>
139+ /// <typeparam name="TColumn2">Type of the column 2.</typeparam>
140+ /// <returns>An entity type builder for further configuration.</returns>
141+ /// <exception cref="ArgumentNullException"><paramref name="modelBuilder"/> is <c>null</c>.</exception>
142+ public static void ConfigureTempTable < TColumn1 , TColumn2 > (
143+ this ModelBuilder modelBuilder ,
144+ Action < EntityTypeBuilder < TempTable < TColumn1 , TColumn2 > > > ? buildAction )
145+ {
146+ ConfigureTempTable ( modelBuilder , true , buildAction ) ;
78147 }
79148
80149 /// <summary>
81150 /// Introduces and configures a temp table.
82151 /// </summary>
83152 /// <param name="modelBuilder">A model builder.</param>
84153 /// <param name="isKeyless">Indication whether the entity has a key or not.</param>
154+ /// <param name="buildAction">An action that performs configuration of the entity type.</param>
85155 /// <typeparam name="TColumn1">Type of the column 1.</typeparam>
86156 /// <typeparam name="TColumn2">Type of the column 2.</typeparam>
87157 /// <returns>An entity type builder for further configuration.</returns>
88158 /// <exception cref="ArgumentNullException"><paramref name="modelBuilder"/> is <c>null</c>.</exception>
89- public static EntityTypeBuilder < TempTable < TColumn1 , TColumn2 > > ConfigureTempTable < TColumn1 , TColumn2 > ( this ModelBuilder modelBuilder , bool isKeyless = true )
159+ public static void ConfigureTempTable < TColumn1 , TColumn2 > (
160+ this ModelBuilder modelBuilder ,
161+ bool isKeyless = true ,
162+ Action < EntityTypeBuilder < TempTable < TColumn1 , TColumn2 > > > ? buildAction = null )
90163 {
91164 ArgumentNullException . ThrowIfNull ( modelBuilder ) ;
92165
@@ -99,16 +172,17 @@ public static EntityTypeBuilder<TempTable<TColumn1, TColumn2>> ConfigureTempTabl
99172 builder . Property ( t => t . Column2 ) . ValueGeneratedNever ( ) ;
100173 }
101174
102- return builder ;
175+ buildAction ? . Invoke ( builder ) ;
103176 }
104177
105178 private static EntityTypeBuilder < T > ConfigureTempTableInternal < T > ( this ModelBuilder modelBuilder , bool isKeyless )
106179 where T : class
107180 {
108181 ArgumentNullException . ThrowIfNull ( modelBuilder ) ;
109182
110- var builder = modelBuilder . Entity < T > ( ) . ToTable ( $ "#{ typeof ( T ) . ShortDisplayName ( ) } ",
111- tableBuilder => tableBuilder . ExcludeFromMigrations ( ) ) ;
183+ var builder = modelBuilder . SharedTypeEntity < T > ( EntityNameProvider . GetTempTableName ( typeof ( T ) ) )
184+ . ToTable ( $ "#{ typeof ( T ) . ShortDisplayName ( ) } ",
185+ tableBuilder => tableBuilder . ExcludeFromMigrations ( ) ) ;
112186
113187 if ( isKeyless )
114188 builder . HasNoKey ( ) ;
0 commit comments