3
3
4
4
using System ;
5
5
using System . Linq ;
6
+ using Microsoft . EntityFrameworkCore . Metadata ;
6
7
using Microsoft . EntityFrameworkCore . Metadata . Builders ;
7
8
using Microsoft . EntityFrameworkCore . Metadata . Internal ;
8
9
using Microsoft . EntityFrameworkCore . TestModels . ComplexNavigationsModel ;
@@ -33,18 +34,23 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con
33
34
. Ignore ( e => e . OneToMany_Required_Self )
34
35
. Ignore ( e => e . OneToMany_Required_Self_Inverse )
35
36
. Ignore ( e => e . OneToMany_Optional_Self )
36
- . Ignore ( e => e . OneToMany_Optional_Self_Inverse )
37
- . Ignore ( e => e . OneToMany_Required )
38
- . Ignore ( e => e . OneToMany_Optional ) ;
37
+ . Ignore ( e => e . OneToMany_Optional_Self_Inverse ) ;
39
38
40
39
var level1 = level1Builder . Metadata ;
40
+
41
+ ForeignKey level2Fk ;
41
42
var level2 = level1 . Model . AddEntityType ( typeof ( Level2 ) , nameof ( Level1 . OneToOne_Required_PK ) , level1 ) ;
42
- var level2Fk = level2 . AddForeignKey ( level2 . FindProperty ( nameof ( Level2 . Id ) ) , level1 . FindPrimaryKey ( ) , level1 ) ;
43
- level2Fk . HasPrincipalToDependent ( nameof ( Level1 . OneToOne_Required_PK ) ) ;
44
- level2Fk . IsUnique = true ;
45
- level2Fk . DeleteBehavior = DeleteBehavior . Restrict ;
43
+ using ( var batch = ( ( Model ) modelBuilder . Model ) . ConventionDispatcher . StartBatch ( ) )
44
+ {
45
+ level2Fk = ( ForeignKey ) level2 . AddForeignKey ( level2 . FindProperty ( nameof ( Level2 . Id ) ) , level1 . FindPrimaryKey ( ) , level1 ) ;
46
+ level2Fk . HasPrincipalToDependent ( nameof ( Level1 . OneToOne_Required_PK ) ) ;
47
+ level2Fk . HasDependentToPrincipal ( nameof ( Level2 . OneToOne_Required_PK_Inverse ) ) ;
48
+ level2Fk . IsUnique = true ;
49
+ level2Fk . DeleteBehavior = DeleteBehavior . Restrict ;
50
+ level2Fk = batch . Run ( level2Fk ) ;
51
+ }
46
52
47
- Configure ( new ReferenceOwnershipBuilder < Level1 , Level2 > ( ( EntityType ) level1 , ( EntityType ) level2 , ( ( ForeignKey ) level2Fk ) . Builder ) ) ;
53
+ Configure ( new ReferenceOwnershipBuilder < Level1 , Level2 > ( ( EntityType ) level1 , level2Fk . DeclaringEntityType , level2Fk . Builder ) ) ;
48
54
49
55
modelBuilder . Entity < InheritanceBase1 > ( ) . Property ( e => e . Id ) . ValueGeneratedNever ( ) ;
50
56
modelBuilder . Entity < InheritanceBase2 > ( ) . Property ( e => e . Id ) . ValueGeneratedNever ( ) ;
@@ -89,10 +95,7 @@ protected virtual void Configure(ReferenceOwnershipBuilder<Level1, Level2> l2)
89
95
. Ignore ( e => e . OneToMany_Required_Self_Inverse )
90
96
. Ignore ( e => e . OneToMany_Optional_Self )
91
97
. Ignore ( e => e . OneToMany_Optional_Self_Inverse )
92
- . Ignore ( e => e . OneToMany_Required )
93
- . Ignore ( e => e . OneToMany_Required_Inverse )
94
- . Ignore ( e => e . OneToMany_Optional )
95
- . Ignore ( e => e . OneToMany_Optional_Inverse ) . OwnedEntityType ;
98
+ . OwnedEntityType ;
96
99
97
100
l2 . Property ( e => e . Id ) . ValueGeneratedNever ( ) ;
98
101
@@ -112,13 +115,28 @@ protected virtual void Configure(ReferenceOwnershipBuilder<Level1, Level2> l2)
112
115
. HasForeignKey < Level2 > ( e => e . Level1_Optional_Id )
113
116
. IsRequired ( false ) ;
114
117
118
+ l2 . HasOne ( e => e . OneToMany_Required_Inverse )
119
+ . WithMany ( e => e . OneToMany_Required )
120
+ . IsRequired ( )
121
+ . OnDelete ( DeleteBehavior . Restrict ) ;
122
+
123
+ l2 . HasOne ( e => e . OneToMany_Optional_Inverse )
124
+ . WithMany ( e => e . OneToMany_Optional )
125
+ . IsRequired ( false ) ;
126
+
127
+ ForeignKey level3Fk ;
115
128
var level3 = level2 . Model . AddEntityType ( typeof ( Level3 ) , nameof ( Level2 . OneToOne_Required_PK ) , level2 ) ;
116
- var level3Fk = level3 . AddForeignKey ( level3 . FindProperty ( nameof ( Level3 . Id ) ) , level2 . FindPrimaryKey ( ) , level2 ) ;
117
- level3Fk . HasPrincipalToDependent ( nameof ( Level2 . OneToOne_Required_PK ) ) ;
118
- level3Fk . IsUnique = true ;
119
- level3Fk . DeleteBehavior = DeleteBehavior . Restrict ;
129
+ using ( var batch = ( ( Model ) level2 . Model ) . ConventionDispatcher . StartBatch ( ) )
130
+ {
131
+ level3Fk = ( ForeignKey ) level3 . AddForeignKey ( level3 . FindProperty ( nameof ( Level3 . Id ) ) , level2 . FindPrimaryKey ( ) , level2 ) ;
132
+ level3Fk . HasPrincipalToDependent ( nameof ( Level2 . OneToOne_Required_PK ) ) ;
133
+ level3Fk . HasDependentToPrincipal ( nameof ( Level3 . OneToOne_Required_PK_Inverse ) ) ;
134
+ level3Fk . IsUnique = true ;
135
+ level3Fk . DeleteBehavior = DeleteBehavior . Restrict ;
136
+ level3Fk = batch . Run ( level3Fk ) ;
137
+ }
120
138
121
- Configure ( new ReferenceOwnershipBuilder < Level2 , Level3 > ( ( EntityType ) level2 , ( EntityType ) level3 , ( ( ForeignKey ) level3Fk ) . Builder ) ) ;
139
+ Configure ( new ReferenceOwnershipBuilder < Level2 , Level3 > ( ( EntityType ) level2 , level3Fk . DeclaringEntityType , level3Fk . Builder ) ) ;
122
140
}
123
141
124
142
protected virtual void Configure ( ReferenceOwnershipBuilder < Level2 , Level3 > l3 )
@@ -128,10 +146,7 @@ protected virtual void Configure(ReferenceOwnershipBuilder<Level2, Level3> l3)
128
146
. Ignore ( e => e . OneToMany_Required_Self_Inverse )
129
147
. Ignore ( e => e . OneToMany_Optional_Self )
130
148
. Ignore ( e => e . OneToMany_Optional_Self_Inverse )
131
- . Ignore ( e => e . OneToMany_Required )
132
- . Ignore ( e => e . OneToMany_Required_Inverse )
133
- . Ignore ( e => e . OneToMany_Optional )
134
- . Ignore ( e => e . OneToMany_Optional_Inverse ) . OwnedEntityType ;
149
+ . OwnedEntityType ;
135
150
136
151
l3 . Property ( e => e . Id ) . ValueGeneratedNever ( ) ;
137
152
@@ -151,13 +166,28 @@ protected virtual void Configure(ReferenceOwnershipBuilder<Level2, Level3> l3)
151
166
. HasForeignKey < Level3 > ( e => e . Level2_Optional_Id )
152
167
. IsRequired ( false ) ;
153
168
169
+ l3 . HasOne ( e => e . OneToMany_Required_Inverse )
170
+ . WithMany ( e => e . OneToMany_Required )
171
+ . IsRequired ( )
172
+ . OnDelete ( DeleteBehavior . Restrict ) ;
173
+
174
+ l3 . HasOne ( e => e . OneToMany_Optional_Inverse )
175
+ . WithMany ( e => e . OneToMany_Optional )
176
+ . IsRequired ( false ) ;
177
+
178
+ ForeignKey level4Fk ;
154
179
var level4 = level3 . Model . AddEntityType ( typeof ( Level4 ) , nameof ( Level3 . OneToOne_Required_PK ) , level3 ) ;
155
- var level4Fk = level4 . AddForeignKey ( level4 . FindProperty ( nameof ( Level4 . Id ) ) , level3 . FindPrimaryKey ( ) , level3 ) ;
156
- level4Fk . HasPrincipalToDependent ( nameof ( Level3 . OneToOne_Required_PK ) ) ;
157
- level4Fk . IsUnique = true ;
158
- level4Fk . DeleteBehavior = DeleteBehavior . Restrict ;
180
+ using ( var batch = ( ( Model ) level3 . Model ) . ConventionDispatcher . StartBatch ( ) )
181
+ {
182
+ level4Fk = ( ForeignKey ) level4 . AddForeignKey ( level4 . FindProperty ( nameof ( Level4 . Id ) ) , level3 . FindPrimaryKey ( ) , level3 ) ;
183
+ level4Fk . HasPrincipalToDependent ( nameof ( Level3 . OneToOne_Required_PK ) ) ;
184
+ level4Fk . HasDependentToPrincipal ( nameof ( Level4 . OneToOne_Required_PK_Inverse ) ) ;
185
+ level4Fk . IsUnique = true ;
186
+ level4Fk . DeleteBehavior = DeleteBehavior . Restrict ;
187
+ level4Fk = batch . Run ( level4Fk ) ;
188
+ }
159
189
160
- Configure ( new ReferenceOwnershipBuilder < Level3 , Level4 > ( ( EntityType ) level3 , ( EntityType ) level4 , ( ( ForeignKey ) level4Fk ) . Builder ) ) ;
190
+ Configure ( new ReferenceOwnershipBuilder < Level3 , Level4 > ( ( EntityType ) level3 , level4Fk . DeclaringEntityType , level4Fk . Builder ) ) ;
161
191
}
162
192
163
193
protected virtual void Configure ( ReferenceOwnershipBuilder < Level3 , Level4 > l4 )
@@ -166,9 +196,7 @@ protected virtual void Configure(ReferenceOwnershipBuilder<Level3, Level4> l4)
166
196
. Ignore ( e => e . OneToMany_Required_Self )
167
197
. Ignore ( e => e . OneToMany_Required_Self_Inverse )
168
198
. Ignore ( e => e . OneToMany_Optional_Self )
169
- . Ignore ( e => e . OneToMany_Optional_Self_Inverse )
170
- . Ignore ( e => e . OneToMany_Required_Inverse )
171
- . Ignore ( e => e . OneToMany_Optional_Inverse ) ;
199
+ . Ignore ( e => e . OneToMany_Optional_Self_Inverse ) ;
172
200
173
201
l4 . Property ( e => e . Id ) . ValueGeneratedNever ( ) ;
174
202
@@ -187,6 +215,15 @@ protected virtual void Configure(ReferenceOwnershipBuilder<Level3, Level4> l4)
187
215
. WithOne ( e => e . OneToOne_Optional_FK )
188
216
. HasForeignKey < Level4 > ( e => e . Level3_Optional_Id )
189
217
. IsRequired ( false ) ;
218
+
219
+ l4 . HasOne ( e => e . OneToMany_Required_Inverse )
220
+ . WithMany ( e => e . OneToMany_Required )
221
+ . IsRequired ( )
222
+ . OnDelete ( DeleteBehavior . Restrict ) ;
223
+
224
+ l4 . HasOne ( e => e . OneToMany_Optional_Inverse )
225
+ . WithMany ( e => e . OneToMany_Optional )
226
+ . IsRequired ( false ) ;
190
227
}
191
228
192
229
protected override void Seed ( ComplexNavigationsContext context )
0 commit comments