public static void ConcurrencyDemo()
        {
            System.Console.WriteLine("------------------------------");
            System.Console.WriteLine(new StackTrace().GetFrame(0).GetMethod().Name);
            System.Console.WriteLine("------------------------------");

            Customer customer;
            // User 1 holt Customer
            using (var srv = new CustomerService())
            {
                customer = srv.All<Customer>().FirstOrDefault();
            }

            // User 2 will auch etwas machen und ist schneller
            var t = Task.Factory.StartNew(() =>
              {
                  using (var srv = new CustomerService())
                  {
                      var c = srv.All<Customer>().FirstOrDefault();
                      if (c != null)
                      {
                          c.LastName = "XYZ4";
                          c.State = State.Modified;
                          srv.Commit(new List<Customer>{c});
                      }
                  }
              });

            t.Wait();

            if (customer != null)
            {
                customer.LastName = "ABC";
                customer.State = State.Modified;

                System.Console.WriteLine("-Modified Customer: {0} {1}", customer.FistName, customer.LastName);

                using (var srv = new CustomerService())
                {
                    OperationResult result = srv.Commit(new List<Customer> {customer});
                    if (result.ResultType == OperationResultType.ConcurencyExeption)
                        System.Console.WriteLine(result.Message);

                }
                System.Console.WriteLine("-Reseted Customer: {0} {1}", customer.FistName, customer.LastName);
            }
        }
        public static void CrudDemo()
        {
            System.Console.WriteLine("------------------------------");
            System.Console.WriteLine(new StackTrace().GetFrame(0).GetMethod().Name);
            System.Console.WriteLine("------------------------------");

            List<Customer> customers;

            /****************************************************************************
            * Client:"Give me List<Customer>"
            *****************************************************************************/

            using (var customerService = new CustomerService())
            {
                customers = customerService.AllIncluding<Customer>("Orders.OrderDetails.Article").Take(2).ToList();
                //customers = customerService.AllIncluding(c => c.Orders).Take(2).ToList();
            }

            /****************************************************************************
            * Modifications
            * No Context => Disconnected
            *****************************************************************************/

            //foreach (Customer c in customers)
            //{
            //    System.Console.WriteLine("Customer: {0} {1}", c.FistName, c.LastName);
            //    foreach (Order o in c.Orders)
            //    {
            //        System.Console.WriteLine("\tOrder: {0} {1}", o.Id, o.OrderDate);
            //    }
            //}

            foreach (Customer c in customers)
            {
                System.Console.WriteLine("Customer: {0} {1}", c.FistName, c.LastName);
                foreach (Order o in c.Orders)
                {
                    System.Console.WriteLine("\tOrder: {0} {1}", o.Id, o.OrderDate);

                    foreach (OrderDetail d in o.OrderDetails)
                    {
                        System.Console.WriteLine("\t\tOrderDetail: {0} {1}", d.Count, d.Article.Name);
                    }
                }
            }

            System.Console.Read();

            // Update existing Customer
            Customer customer = customers.First();

            // UPDATE
            customer.FistName = "MaxXXXX";
            customer.State = State.Modified;

            // DELETE
            //customer.State = State.Deleted;
            //foreach (Order o in customer.Orders)
            //{
            //    o.State = State.Deleted;
            //    foreach (OrderDetail d in o.OrderDetails)
            //    {
            //        d.Article.State = State.Deleted;
            //        d.State = State.Deleted;
            //    }
            //}

            /****************************************************************************
            * Modifications
            * No Context => Disconnected
            **************************************************************************/

            // Persist to DB

            using (var service = new CustomerService())
            {
                service.Commit(customers);
            }
        }