«На объектный объект нельзя ссылаться несколькими экземплярами IEntityChangeTracker». со случайными данными - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь генерировать случайные данные в базе данных.

У меня есть этот класс:

public class TeacherGenerator : BaseDataGenerator
    {


        //PortfolioGenerator portfolioGenerator = new PortfolioGenerator(unitOfWork);
        public TeacherGenerator(UnitOfWork unitofWork) : base(unitofWork)
        {
        }

        public void LoginTeacher(string bsn)
        {
            var generator = new PortfolioGenerator(new UnitOfWork());
            FirstName firstname = FirstNames.OrderBy(a => Guid.NewGuid()).First();
            var brpPersoon = HelperManager.BrpPersoonReposHelper2.GetByBsn(bsn);

            var leraar = HelperManager.LeraarReposHelper.GetByBsn(bsn);

            if (leraar == null)
            {
                throw new InvalidOperationException($"Leraar bestaat niet in database");
            }

            if (ProbabilityBool(40))
            {

                leraar.WizardStap = 1;
                brpPersoon.Roepnaam = ProbabilityBool(80) ? firstname.Name : null;
                leraar.Email = ProbabilityBool(90) ? GenerateUniqueEmailAddress() : null;


                if (ProbabilityBool(38))
                {
                    leraar.WizardStap = 2;
                }
                if (ProbabilityBool(38))
                {
                    leraar.WizardStap = 3;
                    leraar.IsGeheim = (ProbabilityBool(60) ? true : false);
                    leraar.RegistratieDatumUtc = ProbabilityBool(90) ? DateTime.UtcNow.AddDays(new Random().Next(90)) : (DateTime?)null;
                    leraar.AanmeldDatumUtc = ProbabilityBool(90) ? DateTime.UtcNow.Date : (DateTime?)null;

                    if (ProbabilityBool(50))
                    {
                        generator.CreatePortfolioActivities(leraar, false);
                    }
                }
            }
            else
            {
                leraar.WizardStap = 0;
                brpPersoon.Roepnaam = null;
                leraar.Email = null;
            }

            UnitOfWork.SaveChanges();
        }




    }
}

Но на этой строке:

if (ProbabilityBool(50))
                    {
                        generator.CreatePortfolioActivities(leraar, false);
                    }

Метод такой:

 internal void CreatePortfolioActivities(Leraar teacher, bool saveToDb)
        {
            int numberOfPortfolioItems = RandomNumber(1, 50);
            int portfolioCount = teacher.Portfolio.Count() + numberOfPortfolioItems;
            if (portfolioCount > MaxPortfolioCount)
            {
                return;
            }

            for (int i = 0; i < numberOfPortfolioItems; i++)
            {
                //try
                //{
                    Portfolio portfolio = CreatePortfolioActivity();
                    AddPortfolioToTeacher(teacher, portfolio);

                    count++;
                    Trace.Write($"Portfolio aanmaken: {count}\r");
                //}
                //catch (Exception exp)
                //{
                //    Trace.WriteLine($"Portfolio is NIET aangemaakt. Details: {exp}");
                //}
            }
            if (saveToDb)
            {
                UnitOfWork.SaveChanges();
            }
        }

тогда я попаду на эту строку:

AddPortfolioToTeacher(teacher, portfolio);

эта ошибка:

System.InvalidOperationException: «Объект сущности не может быть ссылается на несколько экземпляров IEntityChangeTracker. '

Не понимаю этого.

Как это исправить?

Спасибо

это для генерации leraar:

  private string GenerateXmlContent(string bsn)
        {
            RequestXmlBuilder requestBuilder = new RequestXmlBuilder();
            requestBuilder.WithIdentificatiecodeBedrijfsdocument($"BulkGenerator_{Guid.NewGuid()}")
                .WithSender("DUO")
                .WithReceiver("CIBG")
                .At(DateTime.Now.AddSeconds(1).ToString("yyyy-MM-ddThh:mm:ss", new CultureInfo("nl-NL")));

            LeraarXmlBuilder leraar = GenerateLeraarXml(bsn);
            requestBuilder.Including(leraar);

            string content = requestBuilder.Build();
            return content;
        }

и этот метод:

 private LeraarXmlBuilder GenerateLeraarXml(string bsn)
        {
            LeraarXmlBuilder leraarBuilder = new LeraarXmlBuilder();
            IdentificatieMensXmlBuilder identificatieMensBuilder = new IdentificatieMensXmlBuilder();
            identificatieMensBuilder.WithValue(bsn);

            leraarBuilder.Including(identificatieMensBuilder);

            if (ProbabilityBool(20))
            {
                //woon in buitenland
                BuitenlandsWoonadresXmlBuilder buitenlandsWoonadresBuilder = new BuitenlandsWoonadresXmlBuilder();
                leraarBuilder.Including(buitenlandsWoonadresBuilder);

                buitenlandsWoonadresBuilder.InCountryWithCode(Countries.OrderBy(c => Guid.NewGuid()).First().Code);
                buitenlandsWoonadresBuilder.WithAddressLine1("Address regel 1");

                if (ProbabilityBool(50))
                {
                    //2e regel
                    buitenlandsWoonadresBuilder.WithAddressLine2("Address regel 2");

                    if (ProbabilityBool(50))
                    {
                        //3e regel
                        buitenlandsWoonadresBuilder.WithAddressLine3("Address regel 3");
                    }
                }
            }

            BevoegdGezagXmlBuilder bevoegdGezagBuilder = GenerateBevoegdGezagXml();
            leraarBuilder.Including(bevoegdGezagBuilder);

            if (ProbabilityBool(30))
            {
                //ook werkzaam bij andere bevoegdgezag
                bevoegdGezagBuilder = GenerateBevoegdGezagXml();
                leraarBuilder.Including(bevoegdGezagBuilder);
            }

            return leraarBuilder;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...