Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 伪造数据:同一字段中的条件和随机数据,可能留下空伪造数据_C#_.net_Faker_Bogus - Fatal编程技术网

C# 伪造数据:同一字段中的条件和随机数据,可能留下空伪造数据

C# 伪造数据:同一字段中的条件和随机数据,可能留下空伪造数据,c#,.net,faker,bogus,C#,.net,Faker,Bogus,在使用.net Bogus github存储库填充数据库时,我想用以下内容随机填充字段: {“母亲”、“姐妹”、“兄弟”、“父亲”、“叔叔”、“侄女”、“侄子”、“表弟”} 但也会偶尔留下空值吗 我尝试将它们链接在一起,但似乎没有编译器喜欢的语法 .RuleFor(u => u.Gender, f => f.PickRandom<Gender>().ToString()) .RuleFor(u => u

在使用.net Bogus github存储库填充数据库时,我想用以下内容随机填充字段:

{“母亲”、“姐妹”、“兄弟”、“父亲”、“叔叔”、“侄女”、“侄子”、“表弟”}

但也会偶尔留下空值吗

我尝试将它们链接在一起,但似乎没有编译器喜欢的语法

                .RuleFor(u => u.Gender, f => f.PickRandom<Gender>().ToString())
                .RuleFor(u => u.BirthDate, f => f.Date.PastOffset(60,
                    DateTime.Now.AddYears(-18)).Date.ToShortDateString())
                .RuleFor(u => u.FirstName, (f, u) => f.Name.FirstName(ReturnGenderType(u.Gender)))
                .RuleFor(u => u.MiddleName, (f, u) => f.Name.FirstName(ReturnGenderType(u.Gender)))
                .RuleFor(u => u.LastName, (f, u) => f.Name.LastName(ReturnGenderType(u.Gender)))
                .RuleFor(u => u.Salutation, (f, u) => f.Name.Prefix(ReturnGenderType(u.Gender)))

 private static Bogus.DataSets.Name.Gender ReturnGenderType(string genderString)
        {
            if (genderString == "Male")
            {
                return Bogus.DataSets.Name.Gender.Male;
            }
            else
            {
                return Bogus.DataSets.Name.Gender.Female;
            }
        }
.RuleFor(u=>u.Gender,f=>f.PickRandom().ToString())
.RuleFor(u=>u.BirthDate,f=>f.Date.PastOffset(60,
DateTime.Now.AddYears(-18)).Date.ToSortDateString()
.RuleFor(u=>u.FirstName,(f,u)=>f.Name.FirstName(ReturnGenderType(u.Gender)))
.RuleFor(u=>u.MiddleName,(f,u)=>f.Name.FirstName(ReturnGenderType(u.Gender)))
.RuleFor(u=>u.LastName,(f,u)=>f.Name.LastName(ReturnGenderType(u.Gender)))
.RuleFor(u=>u.称呼,(f,u)=>f.Name.Prefix(ReturnGenderType(u.Gender)))
私有静态Bogus.dataset.Name.Gender返回genderType(字符串genderString)
{
如果(性别字符串==“男性”)
{
返回false.DataSets.Name.Gender.Male;
}
其他的
{
返回false.DataSets.Name.Gender.Female;
}
}

在本例中,它看起来可能必须是一个扩展,因为性别类型稍后会反馈到正常但随机的名称中。

如果您希望在规则中生成“有时为空”值,可以使用方便的
.OrNull()
扩展方法。以下示例显示如何以20%的概率生成可为空的值:

void Main()
{
var userFaker=new Faker()
.RuleFor(u=>u.FirstName,f=>f.Name.FirstName())
.RuleFor(u=>u.LastName,f=>f.Name.LastName().OrNull(f.2f));
userFaker.Generate(10.Dump();
}
公共类用户{
公共字符串名{get;set;}
公共字符串LastName{get;set;}
}

您还可以删除
ReturnGenderType
helper方法,改用
f=>f.Person
属性。综上所述,以下是您的代码如何清理:

void Main()
{
var userFaker=new Faker()
.RuleFor(u=>u.Gender,f=>f.Person.Gender.ToString())
.RuleFor(u=>u.BirthDate,f=>f.Date.PastOffset(60,DateTime.Now.AddYears(-18)).Date.ToShortDateString()
.RuleFor(u=>u.FirstName,f=>f.Person.FirstName)
.RuleFor(u=>u.MiddleName,f=>f.Name.FirstName(f.Person.Gender).OrNull(f.2f))
.RuleFor(u=>u.LastName,f=>f.Person.LastName)
.RuleFor(u=>u.称呼,f=>f.Name.前缀(f.Person.Gender));
userFaker.Generate(10.Dump();
}
公共类用户
{
公共字符串{get;set;}
公共字符串生日{get;set;}
公共字符串名{get;set;}
公共字符串MiddleName{get;set;}
公共字符串LastName{get;set;}
公共字符串称呼{get;set;}
}

顺便说一句,由
f.Name.Prefix(Gender)
生成的称呼有时不正确,因为在
en
语言环境中,性别前缀没有分开。如果这是一个问题,您可以使用一种修复您的区域设置的扩展方法来扩展

公共静态类MyExtensionsForBogus{
公共静态字符串Prefix2(此伪.DataSets.Name名称,性别)
{
如果(性别==性别.男性)
{
返回name.Random.ArrayElement(新[]{“先生”,“博士”});
}
返回name.Random.ArrayElement(新[]{“小姐”、“小姐”、“夫人”});
}
}
然后,新的称呼规则变为:

.RuleFor(u=>u.称呼,f=>f.Name.Prefix2(f.Person.Gender));
现在你得到了一些漂亮的数据:


希望有帮助!=)

有没有一种方法可以将空值的几率设置为不同于性别的几率?@user2206142编辑答案。是,
.OrNull
有一个额外的参数,用于控制可空性的权重。例如,
.OrNull(f,0.7f)
用于生成空值的70%概率。这正是我所需要的。谢谢