/// <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)); //返回指定类型的初始化对象 }
/// <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())); }
/// <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())); }
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) { }