Example #1
0
        /// <summary>
        /// 根据实体主键和IDataSourceType对象获取实体全部信息,如果没有主键返回最上面一条记录实体
        /// </summary>
        /// <typeparam name="T">要构造的泛型实体类型</typeparam>
        /// <param name="t">Model类实体</param>
        /// <param name="idatasource">IDataSourceType数据源类型对象</param>
        /// <returns>填充完的实体对象</returns>
        public static T GetModelById <T>(T t, IDataSourceType idatasource) where T : new()
        {
            Type type = typeof(T);

            object[] objattribute = type.GetCustomAttributes(typeof(DataSource.TableAttribute), false);
            string   tablename    = string.Empty;

            if (objattribute.Length > 0)
            {
                tablename = (objattribute[0] as DataSource.TableAttribute).TableName;//根据表名称特性类获取表名称
            }
            else
            {
                tablename = type.Name;                                                              //否则默认以Model类的名称为表名
            }
            List <string> pklist = GetPKCache <T>(t);                                               //获取主键集合
            Dictionary <string, string> pkproperty = new Dictionary <string, string>(pklist.Count); //主键与主键的值字典

            //构建主键的参数字典用作生成主键参数使用
            foreach (var item in type.GetProperties())
            {
                if (pklist.Contains(item.Name))
                {
                    pkproperty.Add(item.Name, item.GetValue(t, null).ToString());//主键属性不能为空,如果为空直接抛出异常
                }
            }
            SqlParameter[] parameter = new SqlParameter[pklist.Count];//主键查询参数
            //构建主键参数
            for (int i = 0; i < pklist.Count; i++)
            {
                parameter[i] = new SqlParameter(string.Format("@{0}", pklist[i]), pkproperty[pklist[i]]); //自动生成主键与主键值的对应参数
            }
            StringBuilder Appsql = new StringBuilder();                                                   //封装SQL语句

            tablename = " [" + tablename + "] ";
            Appsql.AppendFormat("select top 1 *from {0} where 1=1", tablename);//如果不存在主键就默认选择第一条记录作为Model实体返回
            for (int i = 0; i < pklist.Count; i++)
            {
                Appsql.AppendFormat(" and {0} = @{0}", pklist[i]);//动态填充所有主键属性列
            }
            DataTable tb;

            if (idatasource == null)
            {
                tb = DataSource.IDataSourceTypeFactory.Create().ExecuteTable(CommandType.Text, Appsql.ToString(), parameter);
            }
            else
            {
                tb = idatasource.ExecuteTable(CommandType.Text, Appsql.ToString(), parameter);
            }
            if (tb.Rows.Count > 0)
            {
                return(RowToModel <T>(tb.Rows[0])); //生成实例
            }
            return(default(T));                     //返回指定类型的初始化对象
        }
Example #2
0
        /// <summary>
        /// 根据实体对象和IDataSourceType对象更新一条记录
        /// </summary>
        /// <typeparam name="T">要更新的表对应的实体对象类型</typeparam>
        /// <param name="t">Model实体</param>
        /// <param name="idatasource">IDataSourceType接口实例</param>
        /// <returns>更新是否成功;1成功,0失败</returns>
        public static int UpdateModelById <T>(T t, IDataSourceType idatasource) where T : new()
        {
            string sqlstring = string.Empty;
            List <IDataParameter> paramlist = (List <IDataParameter>)(GetUpdateModelParameterT_SQL <T>(t, out sqlstring));

            if (idatasource != null)
            {
                return(idatasource.ExecuteNonQuery(CommandType.Text, sqlstring, paramlist.ToArray()));
            }
            return(DataSource.IDataSourceTypeFactory.Create().ExecuteNonQuery(CommandType.Text, sqlstring, paramlist.ToArray()));
        }
Example #3
0
        /// <summary>
        ///  根据实体对象和IDataSourceType对象删除一条记录,
        ///  该实体必须明确主键值才能删除记录;如果该实体没有主键可自己编写SQL代码删除;
        /// </summary>
        /// <typeparam name="T">要删除的表对应的实体对象</typeparam>
        /// <param name="t">Model实体</param>
        /// <param name="idatasource">IDataSourceType数据源类型对象</param>
        /// <returns>删除是否成功;1成功,0失败</returns>
        public static int DeleteModelById <T>(T t, IDataSourceType idatasource) where T : new()
        {
            string sqlstring;                                                                                            //保存要执行的T-SQL语句
            List <IDataParameter> paramlist = (List <IDataParameter>)GetDeleteModelParameterT_SQL <T>(t, out sqlstring); //获取利用Model删除时的语句和参数列表

            if (idatasource != null)
            {
                return(IDataSourceTypeFactory.Create().ExecuteNonQuery(CommandType.Text, sqlstring, paramlist.ToArray()));
            }
            return(IDataSourceTypeFactory.Create().ExecuteNonQuery(CommandType.Text, sqlstring, paramlist.ToArray()));
        }
Example #4
0
        public static int InsertModelId <T>(T t, IDataSourceType idatasource) where T : new()
        {
            string sqlstring             = string.Empty;
            List <IDataParameter> parame = (List <IDataParameter>)GetInsertModelParameterT_SQL <T>(t, out sqlstring);

            if (idatasource != null)
            {
                return((int)idatasource.ExecuteScalar(CommandType.Text, sqlstring, parame.ToArray()));
            }
            return((int)IDataSourceTypeFactory.Create().ExecuteScalar(CommandType.Text, sqlstring, parame.ToArray()));
        }
 public RepositorySendFailedEventArgs(IDataSourceType dataSourceType, Exception exception, object extraParameter)
     : base(dataSourceType, extraParameter)
 {
     Exception = exception;
 }
 public RepositoryRemovingEventArgs(IDataSourceType dataSourceType, object extraParameter) 
     : base(dataSourceType, extraParameter)
 {
 }
 protected RepositoryEventArgs(IDataSourceType dataSourceType, object extraParameter)
 {
     DataSourceType = dataSourceType;
     ExtraParameter = extraParameter;
 }
 public RepositoryAddingRangeEventArgs(IDataSourceType dataSourceType, object extraParameter) 
     : base(dataSourceType, extraParameter)
 {
 }