public static void Initialize(IServiceProvider serviceProvider) { using (var context = new MatchmakingContext( serviceProvider.GetRequiredService <DbContextOptions <MatchmakingContext> >())) { // Look for any board games already in database. if (context.TransactionalData.Any()) { return; // Database has been seeded } List <Buyer> buyers = Enumerable.Range(0, NumberOfBuyers).Select(i => new Buyer(i + 1)).ToList(); List <Supplier> suppliers = Enumerable.Range(0, NumberOfSuppliers).Select(i => new Supplier((i + 1), GenerateRandomNumberInRange(0, 100), GenerateRandomNumberInRange(0, 100), GenerateRandomNumberInRange(2, 500))).ToList(); List <TransactionalData> transactionalData = new List <TransactionalData>(); for (int i = 0; i < NumberOfHistoricalDataEntries; i++) { TransactionalData datum = new TransactionalData { TransactionId = i + 1, SupplierId = GenerateSupplierId(i), BuyerId = GenerateBuyerId(i), PriceClassification = GetRandomPrice(i), QualityLikert = GenerateQualityLikertValues(i), DeliveryTimeLikert = GenerateDeliveryTimeLikertValue(i), PackagingLikert = GeneratePackagingLikertvalue(i), ResponseRateLikert = GenerateResponseRateLikertValue(i), OverallSatesfactionLikert = GenerateOverallSatesfactionLikertValue(i) }; transactionalData.Add(datum); foreach (var buyer in buyers) { if (buyer.Id == datum.BuyerId) { buyer.AddTransactionalData(datum); } } } context.AddRange(suppliers); context.AddRange(transactionalData); context.AddRange(buyers); context.SaveChanges(); } }
/// <summary> /// Dispose DataClient /// </summary> public void Dispose() { if (_configurationData != null) { _configurationData.Dispose(); ConfigurationData.Dispose(); } if (_transactionalData != null) { _transactionalData.Dispose(); TransactionalData.Dispose(); } if (_transientData != null) { _transientData.Dispose(); TransientData.Dispose(); } }
/// <summary> /// Seeds Transactional Data /// </summary> /// <param name="dataClientConfig"></param> /// <returns></returns> private async Task TransactionalDataDemoAsync(Config.DataClientConfig dataClientConfig) { try { using (DataClient dataClient = new DataClient(dataClientConfig)) { if (dataClient.TransactionalData != null) { TransactionalData transactionalData = dataClient.TransactionalData; // Explicit loading. When the entity is first read, related data isn't retrieved. // Example code that retrieves the related data. It impacts retrieval performance hence only use if it's needed. await transactionalData.ClientUsers.Include(clientUser => clientUser.Client) .Include(clientUser => clientUser.User).LoadAsync(); await transactionalData.UserCoupons.Include(userCoupon => userCoupon.User) .Include(userCoupon => userCoupon.Coupon).LoadAsync(); ///////// DB seeding with demo content ///////// // Look for any Clients if (transactionalData.ClientUsers.Any()) { string log = "Total ClientUsers found: " + transactionalData.ClientUsers.LongCount() + " | " + "Total UserCoupons found: " + transactionalData.UserCoupons.LongCount(); Context.Logger.LogLine("[TransactionalData Summary]"); Context.Logger.LogLine(log); return; // DB has been seeded already } // DB save operation Context.Logger.LogLine("[Adding contents for TransactionalData]"); // Adding ClientUsers var clientUsers = new ClientUser[] { new ClientUser { ClientID = 1, UserID = 1 } }; foreach (ClientUser clientUser in clientUsers) { transactionalData.ClientUsers.Add(clientUser); } Context.Logger.LogLine("1 ClientUser added"); // Adding UserCoupons var userCoupons = new UserCoupon[] { new UserCoupon { UserID = 1, CouponID = 1 } }; foreach (UserCoupon userCoupon in userCoupons) { transactionalData.UserCoupons.Add(userCoupon); } Context.Logger.LogLine("1 UserCoupon added"); // SAVING the changes into physical DB await transactionalData.SaveChangesAsync(); } } } catch (Exception ex) { Context.Logger.LogLine("TransactionalData ERROR: " + ex.Message); } }