Полный список примеров кода Flexberry ORM находится в статье “Примеры кода”.

Создание и сохранение объекта с большим количеством детейлов

Данный тест осуществляет генерацию большого графа объектов с детейловыми связями и его сохранение в БД. Используемая диаграмма классов имеет вид:

При этом все классы наследуются от нехранимого абстрактного класса D. Для каждого массива детейлов каждого объекта генерируется по 10 детейлов, затем все это сохраняется в БД путем передачи сервису данных корневого объекта графа.

Console.WriteLine("5. Create a dataobject with multiple details.");

// Создаем объект данных, у которого несколько детейловых свойств. 
D0 aggregator = new D0();

// Вызываем метод генерации детейловых объектов. Код метода приведен ниже.
// Иерархия детейлов устроена таким образом, что при задании количества детейлов 10 для каждого объекта
// общее число объектов данных будет превышать 30000.
OrmSample ormSample = new OrmSample();
ormSample.GenDetails(aggregator, 10);

Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();

// Объекты будут сохранены в порядке, соответствующем связям между ними (от корня до кончиков).
DataServiceProvider.DataService.UpdateObject(aggregator);

stopwatch.Stop();
Console.WriteLine("Time taken for persistence: {0} ms.", stopwatch.ElapsedMilliseconds);

Метод GetDetails:

internal void GenDetails(D dobj, int qtyInEach)
{
    RandomStringGenerator rsg = new RandomStringGenerator();
    dobj.Name = rsg.Generate(200);
    dobj.S1 = rsg.Generate(200);
    dobj.S2 = rsg.Generate(200);
    dobj.S3 = rsg.Generate(200);
    dobj.S4 = rsg.Generate(200);
    dobj.S5 = rsg.Generate(200);

    string[] detprops = Information.GetPropertyNamesByType(dobj.GetType(), typeof(DetailArray));
    for (int i = 0; i < detprops.Length; i++)
    {
        DetailArray detarr = (DetailArray)Information.GetPropValueByName(dobj, detprops[i]);
        Type dettypetocreate = Information.GetCompatibleTypesForDetailProperty(dobj.GetType(), detprops[i])[0];
        for (int j = 0; j < qtyInEach; j++)
        {
            D newobj = (D)Activator.CreateInstance(dettypetocreate);
            GenDetails(newobj, qtyInEach);
            detarr.AddObject(newobj);
        }
    }
}