2012-04-23 2 views
0

Я генерирую тестовые/семенные данные для проекта с использованием Autopoco.Назначение случайных значений из заданного списка для семенных объектов в Autopoco

Каждому участнику abject присваивается случайная дата в течение летнего времени (DefaultRandomDateSource), и я также хочу, чтобы объект собрания был назначен случайным заголовком из предопределенного списка (MeetingTitleSource).

Проблема, которую я получаю, заключается в том, что название собрания не применяется в случайном порядке времени. Т.е.: первые две недели - это «Перфронманс-Сессия», затем следующие две недели - это «Заседание по дизайну» и т. Д. И т. Д. Я хочу, чтобы заголовки собраний были назначены совершенно случайным образом.

Может ли кто-нибудь помочь?

Вот мой код, который создает данные семенных

//Configure the default properties 
     var meetings = AutoPocoContainer.Configure(x => 
     { 
      x.Conventions(c => { c.UseDefaultConventions(); }); 
      x.Include<Meeting>() 

       .Setup(c => c.StartDate).Use<DefaultRandomDateSource> 
       (DateTime.Parse("21/Mar/2013"), 
       DateTime.Parse("21/Mar/2012")) 
       .Setup(c => c.EndDate).Use<MeetingEndDateSource>(0, 8) 
       .Setup(c => c.Title).Use<MeetingTitleSource>() 

     }); 

     _meetings = meetings.CreateSession().List<Meeting>(MeetingRecords).Get(); 

Здесь представлен исходный defaultdate

public 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; 
    } 
} 

Вот MeetingTitle Источник

public class MeetingTitleSource : DatasourceBase<string> 
{ 
    private Random mRandom = new Random(1337); 

    public override string Next(IGenerationContext context) 
    { 

     return MeetingNames[mRandom.Next(0, MeetingNames.Length)]; 
    } 

    private static string[] MeetingNames = new String[]{ 
     "Design meeting", 
     "Strategy Meeting", 
     "Performance review", 
     "Appraisal", 
     "Disciplinary", 
     "Project review", 
     "Client Meetings", 
     "Budget Meeting", 
     "Financial Update", 
     "CompStat", 
     "Project Update"      
    }; 
} 
+0

Почему вы используете одно и то же начальное значение? В соответствии с [docs] (http://msdn.microsoft.com/en-us/library/ctssatww.aspx) 'Предоставление одинакового значения семени различным объектам Random приводит к тому, что каждый экземпляр создает идентичные последовательности случайных чисел.' –

+0

Я подозревал, что это семя, но я не могу понять, как генерировать новое начальное значение каждый раз, когда вызывается код. Я уже много сделал. Просто надеясь, что что-то с немного более знакомым с тем, как работает autopoco, может указать мне на правильный путь. – MrBliz

ответ

1

Вы используете один и тот же семян, так то же самое последовательность значений будет генерироваться каждый раз.

Наносекундное значение от системных часов часто используется как семя, вы можете попробовать это.

+0

Да, это сделал трюк, хотя я умножил его на 100, чтобы получить достаточное разрешение – MrBliz

Смежные вопросы