jeudi 6 décembre 2018

Generate random data in database

I am bussy with a application in C# that can generate random data and put it in the database.

I can can do it with one hardcoded record - that it will be saved in the database.

But now I try to make it more generic, so that you can put a x count records in the database.

I have it like so:

public class ZaakGenerator:DataGenerator
    {
        private static int count = 0;
        private List<LijstWaarde> __zaakTypes;

        public ZaakGenerator(UnitOfWork unitOfWork): base(unitOfWork)
        {
            DateTime tomorrow = DateTime.Now;
            var startDate = GetRandomDate(DateTime.Now.AddYears(-3), DateTime.Now.AddDays(-5));
            var endDate = ProbabilityBool(80) ? null : (DateTime?)GetRandomDate(DateTime.Now.AddDays(-1), DateTime.Now.AddYears(2));

            //var zaak = new Zaak
            //{
            //    Type = 100,
            //    Verwijzing = "123459850",
            //    Status = 106,
            //    Substatus = null,
            //    Afhandeling = 106,
            //    Actiehouder = 101,
            //    DatumBinnenkomst = DateTime.Now.AddDays(1), //tomorrow.Add(10).ToString(),
            //    DatumAfgehandeld = null,
            //    Steekproef = false,
            //    DocumentenZaaknummer = null,
            //    DatumVerval = DateTime.Now.AddDays(10)


            //};
            ZakenGenerator(count);
            //HelperManager.ZaakReposHelper.Insert(zaak);
        }

        public void ZakenGenerator(int count)
        {

           // CreateZaak(count);

        }

        public Zaak CreateZaak()
        {
            DateTime datumBinnenkomst = GetRandomDate(DateTime.Now.AddMonths(-18), DateTime.Now);
            var DatumAfgehandeld = ProbabilityBool(80) ? null : (DateTime?)GetRandomDate(DateTime.Now.AddDays(-1), DateTime.Now.AddYears(2));

                var zaak = new Zaak
                {
                    Type = __zaakTypes.OrderBy(a => Guid.NewGuid()).First().Id,
                    Verwijzing = RandomNumber(10, 100).ToString(),
                    Status = 103,
                    Substatus = null,
                    Afhandeling = 106,
                    Actiehouder = 101,
                    DatumBinnenkomst = datumBinnenkomst,
                    DatumAfgehandeld = DatumAfgehandeld,
                    Steekproef = generateZeroreOrNull(),
                    DocumentenZaaknummer = "case" + RandomStringNumbers(9)
                };

                HelperManager.ZaakReposHelper.Insert(zaak);         


            return zaak;

        }   

    }

 public class ZaakReposHelper : HelperBase<Zaak>
    {
        private ZaakHistorieReposHelper _zaakHistorieReposHelper;
        private ZaakNotitieReposHelper _zaakNotitieReposHelper;

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="manager"></param>
        /// <param name="unitOfWork"></param>
        public ZaakReposHelper(HelperManager manager, UnitOfWork unitOfWork) : base(manager, unitOfWork)
        {
            _zaakHistorieReposHelper = new ZaakHistorieReposHelper(manager, unitOfWork);
            _zaakNotitieReposHelper = new ZaakNotitieReposHelper(manager, unitOfWork);
        }


        public override void Insert(Zaak zaak, bool autoSave = true)
        {
            //foreach (var historieEntry in zaak.ZaakHistorie)
            //{
            //    _zaakHistorieReposHelper.Insert(historieEntry, false);
            //}

            if (zaak.ZaakNotitie.FirstOrDefault() != null)
            {
                foreach (var notitie in zaak.ZaakNotitie)
                {
                    _zaakNotitieReposHelper.Insert(notitie, false);
                }
            }

            base.Insert(zaak, autoSave);
        }


        public override void Delete(Zaak zaak, bool autoSave = true)
        {
            _zaakHistorieReposHelper.DeleteByZaakId(zaak.Id, false);

            if (zaak.ZaakNotitie.FirstOrDefault() != null)
            {
                _zaakNotitieReposHelper.DeleteByZaakId(zaak.Id, false);
            }

            base.Delete(zaak, autoSave);
        }
    }

And I am using a console application with this method:

public class ZaakProcess : ProcessBase
    {
        protected override void Generate(int size)
        {
            //var zaakGenerator = new ZaakGenerator(new UnitOfWork());
            // zaakGenerator.ZakenGenerator(size);

            var generator = new ZaakGenerator(new UnitOfWork());

            for (int i = 0; i < size; i++)
            {
                try
                {
                    var result = generator.CreateZaak();
                    //Trace.WriteLine($" met Kvk {result.KvkNummer} is aangemaakt");
                }
                catch (Exception exp)
                {
                    Trace.WriteLine($"zaken zijn NIET aangemaakt. Details: {exp}");
                }
            }


        }
    }

But if I run the application I get this error:

Value cannot be null. Parameter name: source

Thank you

in the catch:

 catch (Exception exp)
                {
                    Trace.WriteLine($"zaken zijn NIET aangemaakt. Details: {exp}");
                }

This is the strack trace:

 at System.Linq.OrderedEnumerable`2..ctor(IEnumerable`1 source, Func`2 keySelector, IComparer`1 comparer, Boolean descending)
   at System.Linq.Enumerable.OrderBy[TSource,TKey](IEnumerable`1 source, Func`2 keySelector)
   at VLR.TestData.Generator.Processes.ZaakGenerator.CreateZaak() in E:\Projects\Source\Repos\EndToEndTest\VLR.TestData.Generator\Processes\ZaakGenerator.cs:line 59
   at VLR.TestData.Generator.Tool.Processes.ZaakProcess.Generate(Int32 size) in E:\Projects\Source\Repos\EndToEndTest\VLR.TestData.Generator.Tool\Processes\ZaakProcess.cs:line 25




Aucun commentaire:

Enregistrer un commentaire