You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中使用Bogus生成每千条同update_time值的假数据如何实现

实现方案

你当前的写法存在两个问题:

  1. 每次生成Document实例时都会重新调用DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()获取时间,导致每条数据的update_time都不一致
  2. 代码语法存在错误:RuleFor的委托内多了多余的分号,且时间戳返回值为long类型,需要转字符串匹配你定义的Document模型字段类型

最简实现(推荐)

分三次生成每批1000条数据,每批生成前提前固定好时间戳,最后合并结果即可:

private static IReadOnlyCollection<Document> GetDocumentsToInsert()
{
    var result = new List<Document>();
    // 分3批生成,每批1000条
    for (int i = 0; i < 3; i++)
    {
        // 每批生成前固定时间戳
        var batchTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
        var batchDocuments = new Bogus.Faker<Document>()
            .StrictMode(true)
            .RuleFor(o => o.id, f => Guid.NewGuid().ToString())
            .RuleFor(o => o.update_time, f => batchTime)
            .Generate(1000);
        result.AddRange(batchDocuments);
        // 如果需要不同批次的时间有明显间隔,可以在这里加等待逻辑,比如 Thread.Sleep(10);
    }
    return result.AsReadOnly();
}

public class Document
{
    public string update_time { get; set; }
    public string id { get; set; }
}

单次生成实现

如果你不想分批次,也可以用Bogus自带的带索引的RuleFor重载,一次性生成3000条数据,按索引分组分配时间戳:

private static IReadOnlyCollection<Document> GetDocumentsToInsert()
{
    // 提前生成3个时间戳,对应3组数据
    var timeStamps = Enumerable.Range(0,3)
        .Select(_ => DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString())
        .ToArray();
    return new Bogus.Faker<Document>()
        .StrictMode(true)
        .RuleFor(o => o.id, f => Guid.NewGuid().ToString())
        // 第二个参数index为当前生成的条目索引,从0开始
        .RuleFor(o => o.update_time, (f, index) => timeStamps[index / 1000])
        .Generate(3000);
}

public class Document
{
    public string update_time { get; set; }
    public string id { get; set; }
}

内容的提问来源于stack exchange,提问作者Mehul Parmar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 23:06:05