Я пытаюсь генерировать случайные данные в базе данных.
У меня есть этот класс:
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;
}