Search code examples
c#.net-coreentity-framework-corebogus

How to generate fake data with pre-defined list for one column while use Bogus to generate random string in another column in C# EF Core?


I have a list of 9 items and I would like to generate exact 9 records in Standard table with the values in the list for StandardName column and use Bogus to generate the random value for the Description column. Is there a quick and easy way to do it with Bogus C#?

var standardNames = new List<string>()
{
    "English Language Arts Standards",
    "Mathematics Standards",    
    "Fine Arts Standards",
    "Language Arts Standards",
    "Mathematics Standards",
    "Physical Education and Health Standards",
    "Science Standards",
    "Social Sciences Standards",
    "Technology Standards"            
};          

using System.Collections.Generic;

namespace EFCore_CodeFirst.Model.School
{
    public class Standard
    {
        public Standard()
        {
            this.Students = new HashSet<Student>();
            this.Teachers = new HashSet<Teacher>();
        }

        public int StandardId { get; set; }
        public string StandardName { get; set; }
        public string Description { get; set; }

        public virtual ICollection<Student> Students { get; set; }
        public virtual ICollection<Teacher> Teachers { get; set; }
    }
}


Solution

  • You can use this Helper class:

    class Helper
    {
        static List<string> standardNames = new List<string>()
        {
            "English Language Arts Standards",
            "Mathematics Standards",
            "Fine Arts Standards",
            "Language Arts Standards",
            "Mathematics Standards",
            "Physical Education and Health Standards",
            "Science Standards",
            "Social Sciences Standards",
            "Technology Standards"
        };
    
        static int nameIndex = 0;
    
        public static List<Standard> GetSampleTableData()
        {
            var index = 1;
    
            var faker = new Faker<Standard>()
                .RuleFor(o => o.StandardId, f => index++)
                .RuleFor(o => o.StandardName, a => GetNextName())
                .RuleFor(o => o.Description, f => f.Random.String(25));
    
            return faker.Generate(standardNames.Count);
        }
    
        private static string GetNextName()
        {
            if (nameIndex >= standardNames.Count)
                nameIndex = 0;
            return standardNames[nameIndex++];
        }
    }