Пример создания объектов данных и сохранение их в БД

В данном примере создается граф объектов данных и затем производится их сохранение в БД с помощью сервиса данных.

Console.WriteLine("1. How to instantiate dataobjects and persist into DB.");

// Объекты данных создаются как и экземпляры других классов .Net - с помощью вызова конструктора.
Country country1 = new Country { Name = "Greece" };
Country country2 = new Country { Name = "USA" };
Country country3 = new Country { Name = "Ireland" };

Person person1 = new Person { LastName = "Johnson", FirstName = "John" };
Person person2 = new Person { LastName = "McLaren", FirstName = "Alice" };

Publisher publisher1 = new Publisher { Name = "First Publisher", Country = country1 };

Publisher publisher2 = new Publisher { Name = "Second Publisher", Country = country2 };

CDDA cdda = new CDDA
{
   Publisher = publisher1, Name = "Strange music", Price = new Dollar(0, 87)
};

// Добавление детейлов в объект данных.
cdda.Track.Add(new Track()
{
    Name = "My strange love",
    Author = person1,
    Singer = person2,
    Length = new Random().Next(100, 600)
});
cdda.Track.Add(new Track()
{
    Name = "Stupid is as stupid does",
    Author = person2,
    Singer = person1,
    Length = new Random().Next(100, 600)
});
cdda.Track.Add(new Track()
{
    Name = "Save my life",
    Author = person2,
    Singer = person1,
    Length = new Random().Next(100, 600)
});

CDDD cddd = new CDDD();
cddd.Publisher = publisher2;
cddd.Name = "Old software";
cddd.Capacity = 640;
cddd.Price = new Dollar(1, 52);

// Объекты данных, которые нужно сохранить, добавим в список.
List<ICSSoft.STORMNET.DataObject> objectsToUpdate = new List<ICSSoft.STORMNET.DataObject>();

for (int i = 0; i < 5; i++)
{
    DVD dvd = new DVD();
    dvd.Publisher = publisher1;
    dvd.Name = string.Format("Movie {0}", i);
    dvd.Capacity = i * 100;
    dvd.Price = new Dollar(2, 66);
    objectsToUpdate.Add(dvd);
}

// Добавление всех объектов, которые нужно обновить, в список для обновления.
objectsToUpdate.AddRange(new ICSSoft.STORMNET.DataObject[]
{
    country1, country2, country3, person1, person2, publisher1, publisher2, cdda, cddd
});

try
{
    ICSSoft.STORMNET.DataObject[] objectsToUpdateArray = objectsToUpdate.ToArray();

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

    // DataServiceProvider.DataService создает сервис данных, тип которого задан в конфигурационном файле (ключи DataServiceType, CustomizationStrings в секции appSettings).
    // Flexberry ORM сохраняет объекты данных в соответствии с их состоянием. Зависимости между объектами обрабатываются автоматически. Все запросы выполняются в одной транзакции. 
    // Таким образом, один вызов UpdateObjects соответствует одной транзакции БД.
    // Кроме этого, существует метод UpdateObject для обновления одиночного объекта (и графа объектов данных, на которые он ссылается).
    DataServiceProvider.DataService.UpdateObjects(ref objectsToUpdateArray);

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