Зависимость BogusFaker ForeignKey для случайных данных - C#
Когда мы используем платформу ASP.NET MVC, у нас есть знаменитая таблица AspNetUsers, которая содержит уникальный идентификатор для каждого пользователя. Я хочу сгенерировать данные в других таблицах на основе созданных "поддельных" пользователей. Как я могу получить идентификатор (из AspNetUsers), который был фактически сгенерирован для других таблиц, таких как ProfileTable?
for (var i = 0; i < names.Count(); i++)
{
AspNetUserFaker = new Faker<AspNetUser>().StrictMode(false)
.RuleFor(a => a.Id, f => Guid.NewGuid().ToString()) // Randomly
.RuleFor(a => a.FirstName, (f, u) => firstNames[i]) // Preselected known names
.RuleFor(a => a.LastName, (f, u) => lastNames[i])
...
}
тогда
ProfileFaker = new Faker<ProfileTable>().StrictMode(false)
// Get Id from the previously created, has to come from AspNetUsers, and only inserted once on this table
.RuleFor(a => a.MemberID, f => f.IndexFaker) // <-- Need help here
.RuleFor(a => a.About, f => f.Lorem.Words())
...
1 ответ
Эту проблему можно решить, сохраняя идентификаторы пользователей в
Queue
и выскакивает каждый раз - брать ID для каждого пользователя и не более того. Вероятно, вам также следует обрабатывать количество сгенерированных
ProfileTable
ограничив его числом существующих пользователей.
var ids = new Queue<string>(); //create Queue to store IDs of generated users
for (var i = 0; i < names.Count(); i++)
{
AspNetUserFaker = new Faker<AspNetUser>()
.StrictMode(false)
.RuleFor(a => a.Id, f => Guid.NewGuid().ToString())
...
.Generate(1); //Assums that the user is generated
ids.Enqueue(AspNetUserFaker.Id);
}
ProfileFaker = new Faker<ProfileTable>()
.StrictMode(false)
.RuleFor(a => a.MemberID, f => ids.Dequeue()) // Sets the value from queue
...
.Generate(ids.Count); //Limit the generation for the amount of users