gpt4 book ai didi

c# - 使用 AutoPoco 生成依赖于另一个值的值

转载 作者:太空狗 更新时间:2023-10-29 23:48:02 25 4
gpt4 key购买 nike

我正在使用出色的 .NET 库 AutoPoco用于创建测试和种子数据。

在我的模型中,我有 2 个日期属性,StartDate 和 EndDate。

我希望 EndDate 比开始日期晚 3 小时。

我在下面为 autopoco 创建了一个自定义数据源,它返回一个介于最小和最大日期之间的随机日期时间

class DefaultRandomDateSource : DatasourceBase<DateTime>
{
private DateTime _MaxDate { get; set; }
private DateTime _MinDate { get; set; }
private Random _random { get; set; }


public DefaultRandomDateSource(DateTime MaxDate, DateTime MinDate)
{
_MaxDate = MaxDate;
_MinDate = MinDate;

}

public override DateTime Next(IGenerationSession session)
{
var tspan = _MaxDate - _MinDate;
var rndSpan = new TimeSpan(0, _random.Next(0, (int) tspan.TotalMinutes), 0);


return _MinDate + rndSpan;
}

}

但是在 AutoPoco 的配置中,我怎样才能让我的 EndDate 成为自动生成的开始日期后 3 小时?

这是autopoco配置

 IGenerationSessionFactory factory = AutoPocoContainer.Configure(x =>
{
x.Conventions(c => { c.UseDefaultConventions(); });
x.AddFromAssemblyContainingType<Meeting>();
x.Include<Meeting>()
.Setup((c => c.CreatedBy)).Use<FirstNameSource>()
.Setup(c => c.StartDate).Use<DefaultRandomDateSource>(DateTime.Parse("21/05/2011"), DateTime.Parse("21/05/2012"));
});

最佳答案

如果我正确理解了您需要的问题:StartDate 设置EndDate。我必须创建一个新的 DataSource 并获取我们正在构建的当前项并从中读取值。我没有彻底检查,但如果在 EndDate 之后设置 StartDate 可能会失败(尽管我认为属性是按照设置的顺序设置的,请阅读 AutoPoco 的源代码).我还使用来自 CodePlex 的最新版本截至今天(2012 年 2 月 20 日)。

public class MeetingsGenerator
{
public static IList<Meeting> CreateMeeting(int count)
{
var factory = AutoPocoContainer.Configure(x =>
{
x.Conventions(c => { c.UseDefaultConventions(); });
x.Include<Meeting>()
.Setup((c => c.CreatedBy)).Use<FirstNameSource>()
.Setup(c => c.StartDate).Use<DefaultRandomDateSource>
(DateTime.Parse("21/May/2012"),
DateTime.Parse("21/May/2011"))
.Setup(c => c.EndDate).Use<MeetingEndDateSource>(0, 8);
});
return factory.CreateSession().List<Meeting>(count).Get();
}
}

public class Meeting
{
public string CreatedBy { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}

public class MeetingEndDateSource : DatasourceBase<DateTime>
{
private int mMin;
private int mMax;
private Random mRandom = new Random(1337);

public MeetingEndDateSource(int min, int max)
{
mMin = min;
mMax = max;
}

public override DateTime Next(IGenerationContext context)
{
var node = (TypeGenerationContextNode)((context.Node).Parent);
var item = node.Target) as Meeting;

if (item == null)
return DateTime.Now;

return item.StartDate.AddHours(mRandom.Next(mMin, mMax + 1));
}
}

class DefaultRandomDateSource : DatasourceBase<DateTime>
{
private DateTime _MaxDate { get; set; }
private DateTime _MinDate { get; set; }
private Random _random = new Random(1337);

public DefaultRandomDateSource(DateTime MaxDate, DateTime MinDate)
{
_MaxDate = MaxDate;
_MinDate = MinDate;
}

public override DateTime Next(IGenerationContext context)
{
var tspan = _MaxDate - _MinDate;

var rndSpan = new TimeSpan(0
, _random.Next(0, (int)tspan.TotalMinutes)
, 0);

return _MinDate + rndSpan;
}
}

关于c# - 使用 AutoPoco 生成依赖于另一个值的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6643157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com