public User CreateUser(User user)
        {
            using (var tran = new DbTransactionManager())
            {
                tran.BeginTransaction();
                using (var db = new DataAccess(tran))
                {
                    try
                    {
                        db.CreateStoredProcCommand("dbo.CreateUser");
                        db.AddInputParameter("@Email", DbType.String, user.Email);
                        db.AddInputParameter("@DisplayName", DbType.String, user.DisplayName);
                        db.AddOutputParameter("@UserId", DbType.Int32);
                        db.ExecuteNonQuery();
                        user.UserId = db.GetParameterValue<int>("@UserId");

                        user.OAuth.UserId = user.UserId;
                        user.OAuth = CreateOAuthUser(user.OAuth, tran);

                        db.CreateStoredProcCommand("dbo.CreateUserProfile");
                        db.AddInputParameter("@UserId", DbType.String, user.UserId);
                        db.AddInputParameter("@LanguageId", DbType.String, user.Profile.Lang.LanguageId);
                        db.AddInputParameter("@Dob", DbType.String, user.Profile.Dob);
                        db.AddInputParameter("@Nationality", DbType.String, user.Profile.Nationality);
                        db.AddOutputParameter("@UserProfileId", DbType.Int32);
                        db.ExecuteNonQuery();
                        user.Profile.UserProfileId = db.GetParameterValue<int>("@UserProfileId");

                        user = GetUser(user.UserId);
                        tran.Commit();
                    }
                    catch (Exception ex)
                    {
                        tran.Rollback();
                        Logger.Error("Error while creating user.", ex);
                        throw;
                    }
                    return user;
                }
            }
        }
 public User GetUser(int userId)
 {
     var user = new User();
     using (var db = new DataAccess())
     {
         db.CreateStoredProcCommand("dbo.GetUserByUserId");
         db.AddInputParameter("@UserId", DbType.Int32, userId);
         try
         {
             db.ReadInto(user,
                         user.Profile,
                         user.Profile.Lang,
                         user.OAuth,
                         user.Roles);
         }
         catch (Exception ex)
         {
             Logger.Error("Error while getting user.", ex);
             throw;
         }
     }
     return user;
 }
        public void UpdateUser(User user)
        {
            using (var tran = new DbTransactionManager())
            {
                tran.BeginTransaction();
                using (var db = new DataAccess(tran))
                {
                    db.CreateStoredProcCommand("dbo.UpdateUser");
                    db.AddInputParameter("@UserId", DbType.Int32, user.UserId);
                    db.AddInputParameter("@Email", DbType.String, user.Email);
                    db.AddInputParameter("@DisplayName", DbType.String, user.DisplayName);
                    try
                    {
                        db.ExecuteNonQuery();

                        if (user.Profile != null)
                        {
                            UpdateUserProfile(user.Profile);
                        }
                        tran.Commit();
                    }
                    catch (Exception ex)
                    {
                        tran.Rollback();
                        Logger.Error("Error while updating user.", ex);
                        throw;
                    }
                }
            }
        }