首页 > 解决方案 > 随机数据的 BogusFaker ForeignKey 依赖项 - C#

问题描述

当我们使用 ASP.NET MVC 框架时,我们有著名的 AspNetUsers 表,其中包含每个用户的唯一 ID。我想根据创建的“假”用户在其他表中生成数据。如何提取为“ProfileTable”等其他表实际生成的 ID(来自 AspNetUsers)?

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())
    ...

标签: c#asp.net-mvcbogus

解决方案


这可以通过存储用户 IDQueue并每次都弹出来解决 - 为每个用户获取 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

推荐阅读