public static void Main()
        {
            try
            {
                CreateUserAndPutInGroupAdmins("Boyan", "Hristov", 18);
            }
            catch (Exception ex)
            {
                Console.WriteLine("User already exists ;)");
            }

            using (var db = new UsersAndGroupsEntities())
            {
                Console.WriteLine("User belongs to group: {0}",
                                  db.Users.FirstOrDefault(user => user.FirstName == "Boyan").UserGroups.FirstOrDefault().Group.Name);
            }
        }
        public static int CreateUserAndPutInGroupAdmins(string firstName, string lastName, short age)
        {
            int affectedRows = 0;

            using (var db = new UsersAndGroupsEntities())
            {
                using (var scope = new TransactionScope())
                {
                    var objectContext = ((IObjectContextAdapter)db).ObjectContext;
                    var userGroup     = db.Groups.FirstOrDefault(group => group.Name == "Admins");

                    if (userGroup == null)
                    {
                        userGroup = db.Groups.Add(new Group()
                        {
                            Name = "Admins"
                        }
                                                  );
                    }

                    var newUser = new User()
                    {
                        FirstName = firstName,
                        LastName  = lastName,
                        Age       = age
                    };

                    newUser.UserGroups.Add(new UserGroup()
                    {
                        Group = userGroup
                    });

                    db.Users.Add(newUser);

                    affectedRows = objectContext.SaveChanges(false);

                    //if we get everything is executed fine, no rollback.
                    //  else => no AcceptAllChanges() called, which is same as Rollback (I suppose)
                    scope.Complete();
                    objectContext.AcceptAllChanges();
                }
            }

            return(affectedRows);
        }