11namespace NorthwindCRUD . Helpers
22{
3- using Microsoft . AspNetCore . JsonPatch . Internal ;
43 using Microsoft . EntityFrameworkCore ;
54 using Newtonsoft . Json ;
65 using NorthwindCRUD . Models . DbModels ;
@@ -15,175 +14,197 @@ public static void Seed(DataContext dbContext)
1514 var transaction = dbContext . Database . BeginTransaction ( System . Data . IsolationLevel . Serializable ) ;
1615 try
1716 {
18- if ( dbContext . Database . ProviderName == "Microsoft.EntityFrameworkCore.SqlServer" )
19- {
20- dbContext . Database . ExecuteSqlRaw ( "EXEC sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'" ) ;
21- }
22- // Seed Categories
23- if ( ! dbContext . Categories . Any ( ) )
24- {
25- var categoriesData = File . ReadAllText ( "./Resources/categories.json" ) ;
26- var parsedCategories = JsonConvert . DeserializeObject < CategoryDb [ ] > ( categoriesData ) ;
17+ SeedCategories ( dbContext ) ;
18+ SeedRegions ( dbContext ) ;
19+ SeedTerritories ( dbContext ) ;
20+ SeedSuppliers ( dbContext ) ;
21+ SeedProducts ( dbContext ) ;
22+ SeedShippers ( dbContext ) ;
23+ SeedEmployees ( dbContext ) ;
24+ SeedCustomers ( dbContext ) ;
25+ SeedOrders ( dbContext ) ;
26+ SeedEmployeesTerritories ( dbContext ) ;
2727
28- dbContext . Categories . AddRange ( parsedCategories ) ;
29- dbContext . SaveChanges ( ) ;
30- }
31-
32- // Seed Customers
33- if ( ! dbContext . Customers . Any ( ) )
34- {
35- var customersData = File . ReadAllText ( "./Resources/customers.json" ) ;
36- var parsedCustomers = JsonConvert . DeserializeObject < CustomerDb [ ] > ( customersData ) ;
28+ transaction . Commit ( ) ;
29+ }
30+ catch ( Exception error )
31+ {
32+ transaction . Rollback ( ) ;
33+ throw ;
34+ }
35+ }
3736
38- foreach ( var customer in parsedCustomers )
39- {
40- if ( dbContext . Addresses . FirstOrDefault ( a => a . Street == customer . Address . Street ) == null )
41- {
42- dbContext . Addresses . Add ( customer . Address ) ;
43- }
44- dbContext . Customers . Add ( customer ) ;
45- }
46- dbContext . SaveChanges ( ) ;
47- }
37+ private static void SeedEmployeesTerritories ( DataContext dbContext )
38+ {
39+ if ( ! dbContext . EmployeesTerritories . Any ( ) )
40+ {
41+ var employeesTerritoriesData = File . ReadAllText ( "./Resources/employees-territories.json" ) ;
42+ var parsedEmployeesTerritories = JsonConvert . DeserializeObject < EmployeeTerritoryDb [ ] > ( employeesTerritoriesData ) ;
4843
49- // Seed Employees
50- if ( ! dbContext . Employees . Any ( ) )
51- {
52- var employeesData = File . ReadAllText ( "./Resources/employees.json" ) ;
53- var parsedEmployees = JsonConvert . DeserializeObject < EmployeeDb [ ] > ( employeesData ) ;
44+ dbContext . EmployeesTerritories . AddRange ( parsedEmployeesTerritories ) ;
45+ dbContext . SaveChanges ( ) ;
46+ }
47+ }
5448
55- foreach ( var employee in parsedEmployees )
56- {
57- if ( dbContext . Addresses . FirstOrDefault ( a => a . Street == employee . Address . Street ) == null )
58- {
59- dbContext . Addresses . Add ( employee . Address ) ;
60- }
61- dbContext . Employees . Add ( employee ) ;
62- }
63- dbContext . SaveChanges ( ) ;
64- }
49+ private static void SeedSuppliers ( DataContext dbContext )
50+ {
51+ if ( ! dbContext . Suppliers . Any ( ) )
52+ {
53+ var suppliersData = File . ReadAllText ( "./Resources/suppliers.json" ) ;
54+ var parsedSuppliers = JsonConvert . DeserializeObject < SupplierDb [ ] > ( suppliersData ) ;
6555
66- // Seed Orders
67- if ( ! dbContext . Orders . Any ( ) )
56+ foreach ( var supplier in parsedSuppliers )
6857 {
69- var ordersData = File . ReadAllText ( "./Resources/orders.json" ) ;
70- var parsedOrders = JsonConvert . DeserializeObject < OrderDb [ ] > ( ordersData ) ;
58+ var matchingProducts = dbContext . Products . Where ( p => p . SupplierId == supplier . SupplierId ) . ToList ( ) ;
59+ supplier . Products = matchingProducts ;
7160
72- foreach ( var order in parsedOrders )
73- {
74- if ( dbContext . Addresses . FirstOrDefault ( a => a . Street == order . ShipAddress . Street ) == null )
75- {
76- dbContext . Addresses . Add ( order . ShipAddress ) ;
77- }
78-
79- if ( ! dbContext . OrderDetails . Any ( o => o . OrderId == order . OrderId ) )
80- {
81- var orderDetailsData = order . Details . ToList ( ) ;
61+ dbContext . Suppliers . Add ( supplier ) ;
62+ }
8263
83- orderDetailsData . ForEach ( o =>
84- {
85- o . OrderId = order . OrderId ;
86- } ) ;
64+ dbContext . SaveChanges ( ) ;
65+ }
66+ }
8767
88- dbContext . OrderDetails . AddRange ( order . Details ) ;
89- }
68+ private static void SeedShippers ( DataContext dbContext )
69+ {
70+ if ( ! dbContext . Shippers . Any ( ) )
71+ {
72+ var shippersData = File . ReadAllText ( "./Resources/shippers.json" ) ;
73+ var parsedShippers = JsonConvert . DeserializeObject < ShipperDb [ ] > ( shippersData ) ;
74+ foreach ( var shipper in parsedShippers )
75+ {
76+ var matchingOrders = dbContext . Orders . Where ( o => o . ShipperId == shipper . ShipperId ) . ToList ( ) ;
77+ shipper . Orders = matchingOrders ;
9078
91- dbContext . Orders . Add ( order ) ;
92- }
93- dbContext . SaveChanges ( ) ;
79+ dbContext . Shippers . Add ( shipper ) ;
9480 }
9581
96- //Seed Products
97- if ( ! dbContext . Products . Any ( ) )
98- {
99- var productsData = File . ReadAllText ( "./Resources/products.json" ) ;
100- var parsedProducts = JsonConvert . DeserializeObject < ProductDb [ ] > ( productsData ) ;
82+ dbContext . SaveChanges ( ) ;
83+ }
84+ }
10185
102- dbContext . Products . AddRange ( parsedProducts ) ;
103- dbContext . SaveChanges ( ) ;
104- }
86+ private static void SeedTerritories ( DataContext dbContext )
87+ {
88+ if ( ! dbContext . Territories . Any ( ) )
89+ {
90+ var territoriesData = File . ReadAllText ( "./Resources/territories.json" ) ;
91+ var parsedTerritories = JsonConvert . DeserializeObject < TerritoryDb [ ] > ( territoriesData ) ;
10592
106- //Seed Territories
107- if ( ! dbContext . Territories . Any ( ) )
108- {
109- var territoriesData = File . ReadAllText ( "./Resources/territories.json" ) ;
110- var parsedTerritories = JsonConvert . DeserializeObject < TerritoryDb [ ] > ( territoriesData ) ;
93+ dbContext . Territories . AddRange ( parsedTerritories ) ;
94+ dbContext . SaveChanges ( ) ;
95+ }
96+ }
11197
112- dbContext . Territories . AddRange ( parsedTerritories ) ;
113- dbContext . SaveChanges ( ) ;
114- }
98+ private static void SeedOrders ( DataContext dbContext )
99+ {
100+ if ( ! dbContext . Orders . Any ( ) )
101+ {
102+ var ordersData = File . ReadAllText ( "./Resources/orders.json" ) ;
103+ var parsedOrders = JsonConvert . DeserializeObject < OrderDb [ ] > ( ordersData ) ;
115104
116- //Seed Regions
117- if ( ! dbContext . Regions . Any ( ) )
105+ foreach ( var order in parsedOrders )
118106 {
119- var productsData = File . ReadAllText ( "./Resources/regions.json" ) ;
120- var parsedRegions = JsonConvert . DeserializeObject < RegionDb [ ] > ( productsData ) ;
121-
107+ if ( dbContext . Addresses . FirstOrDefault ( a => a . Street == order . ShipAddress . Street ) == null )
108+ {
109+ dbContext . Addresses . Add ( order . ShipAddress ) ;
110+ }
122111
123- foreach ( var region in parsedRegions )
112+ if ( ! dbContext . OrderDetails . Any ( o => o . OrderId == order . OrderId ) )
124113 {
125- var matchingTerritories = dbContext . Territories . Where ( t => t . RegionId == region . RegionId ) . ToList ( ) ;
126- region . Territories = matchingTerritories ;
114+ var orderDetailsData = order . Details . ToList ( ) ;
127115
128- dbContext . Regions . Add ( region ) ;
116+ orderDetailsData . ForEach ( o =>
117+ {
118+ o . OrderId = order . OrderId ;
119+ } ) ;
120+
121+ dbContext . OrderDetails . AddRange ( order . Details ) ;
129122 }
130- dbContext . SaveChanges ( ) ;
123+
124+ dbContext . Orders . Add ( order ) ;
131125 }
126+ dbContext . SaveChanges ( ) ;
127+ }
128+ }
129+
130+ private static void SeedEmployees ( DataContext dbContext )
131+ {
132+ if ( ! dbContext . Employees . Any ( ) )
133+ {
134+ var employeesData = File . ReadAllText ( "./Resources/employees.json" ) ;
135+ var parsedEmployees = JsonConvert . DeserializeObject < EmployeeDb [ ] > ( employeesData ) ;
132136
133- //Seed Shippers
134- if ( ! dbContext . Shippers . Any ( ) )
137+ foreach ( var employee in parsedEmployees )
135138 {
136- var shippersData = File . ReadAllText ( "./Resources/shippers.json" ) ;
137- var parsedShippers = JsonConvert . DeserializeObject < ShipperDb [ ] > ( shippersData ) ;
138- foreach ( var shipper in parsedShippers )
139+ if ( dbContext . Addresses . FirstOrDefault ( a => a . Street == employee . Address . Street ) == null )
139140 {
140- var matchingOrders = dbContext . Orders . Where ( o => o . ShipperId == shipper . ShipperId ) . ToList ( ) ;
141- shipper . Orders = matchingOrders ;
142-
143- dbContext . Shippers . Add ( shipper ) ;
141+ dbContext . Addresses . Add ( employee . Address ) ;
144142 }
145-
146- dbContext . SaveChanges ( ) ;
143+ dbContext . Employees . Add ( employee ) ;
147144 }
145+ dbContext . SaveChanges ( ) ;
146+ }
147+ }
148148
149- //Seed Suppliers
150- if ( ! dbContext . Suppliers . Any ( ) )
151- {
152- var suppliersData = File . ReadAllText ( "./Resources/suppliers.json" ) ;
153- var parsedSuppliers = JsonConvert . DeserializeObject < SupplierDb [ ] > ( suppliersData ) ;
149+ private static void SeedCustomers ( DataContext dbContext )
150+ {
151+ if ( ! dbContext . Customers . Any ( ) )
152+ {
153+ var customersData = File . ReadAllText ( "./Resources/customers.json" ) ;
154+ var parsedCustomers = JsonConvert . DeserializeObject < CustomerDb [ ] > ( customersData ) ;
154155
155- foreach ( var supplier in parsedSuppliers )
156+ foreach ( var customer in parsedCustomers )
157+ {
158+ if ( dbContext . Addresses . FirstOrDefault ( a => a . Street == customer . Address . Street ) == null )
156159 {
157- var matchingProducts = dbContext . Products . Where ( p => p . SupplierId == supplier . SupplierId ) . ToList ( ) ;
158- supplier . Products = matchingProducts ;
159-
160- dbContext . Suppliers . Add ( supplier ) ;
160+ dbContext . Addresses . Add ( customer . Address ) ;
161161 }
162-
163- dbContext . SaveChanges ( ) ;
162+ dbContext . Customers . Add ( customer ) ;
164163 }
164+ dbContext . SaveChanges ( ) ;
165+ }
166+ }
165167
166- //Seed EmployeesTeritories
167- if ( ! dbContext . EmployeesTerritories . Any ( ) )
168- {
169- var employeesTerritoriesData = File . ReadAllText ( "./Resources/employees-territories.json" ) ;
170- var parsedEmployeesTerritories = JsonConvert . DeserializeObject < EmployeeTerritoryDb [ ] > ( employeesTerritoriesData ) ;
168+ private static void SeedProducts ( DataContext dbContext )
169+ {
170+ if ( ! dbContext . Products . Any ( ) )
171+ {
172+ var productsData = File . ReadAllText ( "./Resources/products.json" ) ;
173+ var parsedProducts = JsonConvert . DeserializeObject < ProductDb [ ] > ( productsData ) ;
171174
172- dbContext . EmployeesTerritories . AddRange ( parsedEmployeesTerritories ) ;
173- dbContext . SaveChanges ( ) ;
174- }
175+ dbContext . Products . AddRange ( parsedProducts ) ;
176+ dbContext . SaveChanges ( ) ;
177+ }
178+ }
179+
180+ private static void SeedRegions ( DataContext dbContext )
181+ {
182+ if ( ! dbContext . Regions . Any ( ) )
183+ {
184+ var productsData = File . ReadAllText ( "./Resources/regions.json" ) ;
185+ var parsedRegions = JsonConvert . DeserializeObject < RegionDb [ ] > ( productsData ) ;
175186
176- transaction . Commit ( ) ;
177187
178- if ( dbContext . Database . ProviderName == "Microsoft.EntityFrameworkCore.SqlServer" )
188+ foreach ( var region in parsedRegions )
179189 {
180- dbContext . Database . ExecuteSqlRaw ( "EXEC sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'" ) ;
190+ var matchingTerritories = dbContext . Territories . Where ( t => t . RegionId == region . RegionId ) . ToList ( ) ;
191+ region . Territories = matchingTerritories ;
192+
193+ dbContext . Regions . Add ( region ) ;
181194 }
195+ dbContext . SaveChanges ( ) ;
182196 }
183- catch ( Exception error )
197+ }
198+
199+ private static void SeedCategories ( DataContext dbContext )
200+ {
201+ if ( ! dbContext . Categories . Any ( ) )
184202 {
185- transaction . Rollback ( ) ;
186- throw ;
203+ var categoriesData = File . ReadAllText ( "./Resources/categories.json" ) ;
204+ var parsedCategories = JsonConvert . DeserializeObject < CategoryDb [ ] > ( categoriesData ) ;
205+
206+ dbContext . Categories . AddRange ( parsedCategories ) ;
207+ dbContext . SaveChanges ( ) ;
187208 }
188209 }
189210 }
0 commit comments