示例#1
0
        /// <summary>
        ///     To get all the Entity
        ///     By Default it create a stored procedure named GetAll+{TableName}
        /// </summary>
        /// <returns>List of Entity</returns>
        public IList <T> GetAll()
        {
            //StoredProcedure Name
            var spName = "GetAll" + new T().GetTableName();

            using (var con = new SqlConnection(_dBConString))
            {
                var adpt = new SqlDataAdapter(SqlCommandInstance(spName, con));
                try
                {
                    var ds = new DataSet();
                    adpt.Fill(ds);
                    var listT = ds.Tables[0].ToList <T>(); //Creating List of current Entity
                    return(listT);
                }
                catch (SqlException sqlEx)
                {
                    //Exception is for StoredProcedure not found
                    if (sqlEx.Errors[0].State == 62)
                    {
                        //Create the StoredProcedre and run once again to get all Enitity
                        if (CreateProcedure.CreateGetAllEntityProcedure(new T().GetTableName(), con))
                        {
                            return(GetAll());
                        }
                    }
                    throw;
                }
                catch (Exception ex)
                {
                    throw;
                }
            }
        }
示例#2
0
        public CreateProcedure GenerateCreateProcedureStatement(Procedure p)
        {
            CreateProcedure cp = new CreateProcedure();

            cp.Procedure = p;
            return(cp);
        }
        public string GenerateCreateProcedureScript(CreateProcedure CreateProcedureStatement)
        {
            string Tmp = "";

            Tmp += "if exists(select 1 from sysobjects where name = '" + CreateProcedureStatement.Procedure.Name + "')" + Environment.NewLine;
            Tmp += "begin " + Environment.NewLine;
            Tmp += "  drop procedure dbo." + CreateProcedureStatement.Procedure.Name + Environment.NewLine;
            Tmp += "end" + Environment.NewLine;
            Tmp += "GO " + Environment.NewLine;
            Tmp += Environment.NewLine;

            return(Tmp + CreateProcedureStatement.Procedure.Body);
        }
示例#4
0
        /// <summary>
        ///     To save entity to database.
        ///     This method by default use the 'Add+{TableAttribute value}' as storedProcedureName.
        ///     It create stored procedure when not found in database.
        ///     In case of model class of un/decorate some its properties, then delete the procedure from database, other wise it
        ///     throw exception
        /// </summary>
        /// <param name="entity">Entity to be save</param>
        /// <returns>Saved intity with Identity</returns>
        /// <example>
        ///     Student obj=new Student();
        ///     new StudentRepository().Add(obj);
        /// </example>
        public object Add(T entity)
        {
            //If Entity if null throw ArgumentException
            if (entity == null)
            {
                throw new ArgumentException(typeof(T).Name + "object Should not be Null when Saving to database");
            }

            var spName = "Add" + entity.GetTableName(); //StoreProcedure Name

            using (var con = new SqlConnection(_dBConString))
            {
                var cmd = new SqlCommand();
                cmd.CommandText = spName;
                cmd.Connection  = con;
                cmd.CommandType = CommandType.StoredProcedure;
                try
                {
                    //Adding SqlParameters from Entity
                    cmd.Parameters.Clear();
                    var arr = GetAddParameter(entity).ToArray();
                    cmd.Parameters.AddRange(arr);
                    con.Open();
                    var obj = cmd.ExecuteScalar();
                    cmd.Dispose();
                    return(obj);
                }
                catch (SqlException sqlEx)
                {
                    if (sqlEx.Errors[0].State == 62)
                    {
                        if (CreateProcedure.CreateAddEntityProcedure(entity, con))
                        {
                            return(Add(entity));
                        }
                    }
                    throw new ArgumentException(
                              "Some Error occured at database, if error in stored procedure, delete it from DB. See inner exception for more detail exception." +
                              spName, sqlEx);
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }
示例#5
0
        /// <summary>
        ///     Get Entity by its GUID
        /// </summary>
        /// <param name="guid">GUID string </param>
        /// <returns></returns>
        public T GetByGUID(string guid)
        {
            //If GUID is null/Empty, throw NullReferenceException
            if (String.IsNullOrEmpty(guid))
            {
                throw new NullReferenceException("Guid Should not be Null or Empty");
            }

            //Getting Table Name for
            var tableName = new T().GetTableName();

            //StoredProcedure Name
            var spName = "Get" + tableName + "ByGUID";

            using (var con = new SqlConnection(_dBConString))
            {
                var adpt = new SqlDataAdapter(SqlCommandInstance(spName, con, new[] { new SqlParameter("GUID", guid) }));
                try
                {
                    var ds = new DataSet();
                    adpt.Fill(ds);
                    var objT = ds.Tables[0].ToList <T>().SingleOrDefault();
                    return(objT);
                }
                catch (SqlException sqlEx)
                {
                    if (sqlEx.Errors[0].State == 62) //If Stored Procedure Not found then creat it and execute
                    {
                        if (CreateProcedure.GetByGuidStoredProcedure(tableName, con))
                        {
                            return(GetByGUID(guid));
                        }
                    }
                    throw new ArgumentException("Exception: See inner exception.", sqlEx);
                }
                catch (Exception)
                {
                    // ignored
                }
                return(default(T));
            }
        }
示例#6
0
        public void Delete(string guid)
        {
            //If GUID is null/Empty, throw NullReferenceException
            if (String.IsNullOrEmpty(guid))
            {
                throw new NullReferenceException("Guid Should not be Null or Empty");
            }

            //Getting Table Name for
            var tableName = new T().GetTableName();

            //StoredProcedure Name
            var spName = "Delete" + tableName + "ByGUID";

            using (var con = new SqlConnection(_dBConString))
            {
                var cmd = SqlCommandInstance(spName, con, new[] { new SqlParameter("GUID", guid) });

                try
                {
                    con.Open();
                    cmd.ExecuteNonQuery();
                }
                catch (SqlException sqlEx)
                {
                    if (sqlEx.Errors[0].State == 62) //If Stored Procedure Not found then creat it and execute
                    {
                        if (CreateProcedure.DeleteByGuidStoredProcedure(tableName, con))
                        {
                            Delete(guid);
                        }
                    }
                    throw new ArgumentException("Exception: See inner exception.", sqlEx);
                }
                catch (Exception)
                {
                    // ignored
                }
            }
        }
示例#7
0
        public T Update(T entity)
        {
            var spName = "Update" + new T().GetTableName();

            using (var con = new SqlConnection(_dBConString))
            {
                var cmd = new SqlCommand
                {
                    CommandText = spName,
                    Connection  = con,
                    CommandType = CommandType.StoredProcedure
                };
                cmd.Parameters.AddRange(GetUpdateParameter(entity).ToArray());
                var adpt = new SqlDataAdapter(cmd);
                var ds   = new DataSet();
                try
                {
                    adpt.Fill(ds);
                    var objT = ds.Tables[0].ToList <T>();
                    return(objT.SingleOrDefault());
                }
                catch (SqlException sqlEx)
                {
                    if (sqlEx.Errors[0].State == 62)
                    {
                        if (CreateProcedure.CreateUpdateEntityProcedure(entity, con))
                        {
                            return(Update(entity));
                        }
                    }
                    throw new ArgumentException(
                              "Class Name and Table name must be same for this method. See inner exception", sqlEx);
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }