让C#开发更简单抽象增删改Word下载.docx
《让C#开发更简单抽象增删改Word下载.docx》由会员分享,可在线阅读,更多相关《让C#开发更简单抽象增删改Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
///
<
summary>
数据库访问类
/summary>
public
class
DataBaseAccess
static
SqlConnection
CreateConnection()
string
connStr
=
ConfigurationManager.ConnectionStrings["
connString"
].ConnectionString;
conn
new
SqlConnection(connStr);
conn.Open();
return
conn;
}
执行增、删、改方法
param
name="
sql"
>
/param>
parms"
returns>
/returns>
int
Execute(string
sql,
object
parms
null)
(IDbConnection
CreateConnection())
conn.Execute(sql,parms);
得到单行单列
ExecuteScalar(string
conn.ExecuteScalar(sql,
parms);
单个数据集查询
List<
TEntity>
Query<
(string
sql,Func<
TEntity,bool>
pre
object
conn.Query<
(sql,
parms).Where(pre).ToList();
parms).ToList();
多个数据集查询
SqlMapper.GridReader
MultyQuery(string
conn.QueryMultiple(sql,
TEntity
FirstOrDefault<
selector,
parms).Where(selector).FirstOrDefault();
}
我把增删改查抽象出来了,少不了的就是SQL语句的生成,生成SQL语句,要么是映射,要么是反射,而我用的是反射,给一个Entity类,我读取他所有属性和字段,然后生成对应的SQL语句。
NetUtility.Dapper.Core.DataMapping.cs
internal
DataMapping<
TModel>
where
TModel
:
#region
数据库类型+DataBaseType
数据库类型
DataBaseType
get
strType
ConfigurationManager.AppSettings["
DataBaseType"
];
if
(!
string.IsNullOrEmpty(strType))
strType;
else
string.Empty;
#endregion
主键属性字段+PrimaryKey
主键字段名称
PrimaryKey
Type
t
typeof(TModel);
TableInfoAttribute
tableInfo
t.GetCustomAttribute(typeof(TableInfoAttribute),
true)
as
TableInfoAttribute;
(tableInfo!
=null)//如果没有标识表信息特性,则通过表名向数据库中得到主键信息
tableInfo.PrimaryKey;
tableName
TableName();
DataBaseAccess.ExecuteScalar("
SELECT
name
FROM
SysColumns
WHERE
id=Object_Id('
"
+
'
)
and
colid=(select
top
1
colid
from
sysindexkeys
))"
).ToString();
获取表名+TableName
获取表名
prev"
数据库表名前缀<
TableName(string
prev
!
null
?
tableInfo.TableName
string.Concat(prev,
t.Name);
Select
查询语句+GetQuerySql
查询语句
GetQuerySql()
StringBuilder
sql
StringBuilder("
select
*
);
sql.Append(TableName());
sql.ToString();
Insert非Null属性的对象实例
Sql
语句+GetInsertSql
Insert
非Null属性的对象实例
语句
model"
GetInsertSql(TModel
model)
insert
into
string[]
props
Propertys(model);
sql.Append("
("
sql.Append(string.Join("
"
props));
values(@"
@"
@@IDENTITY"
Delete
语句+GetDeleteSql
GetDeleteSql()
string.Format(@"
delete
{0}
{1}
in
@IdList"
TableName(),
PrimaryKey);
Update
Sql语句+GetUpdateSql
Sql语句
GetUpdateSql(TModel
update
set
foreach
propName
props)
sql.Append(propName
=@"
sql.Remove(sql.Length
-
1,
1);
=@Id"
非主键且非Null属性集合+Propertys
非主键且非Null属性
Propertys(TModel
PropertyInfo[]
typeof(TModel).GetProperties();
string>
list
();
key
PrimaryKey;
(props
&
props.Length
0)
(PropertyInfo
prop
(prop.GetValue(model,
prop.Name.Equals(key,
StringComparison.OrdinalIgnoreCase))
list.Add(prop.Name);
list.ToArray();
代码中的TableInfoAttribute类是我建一个属性特性类,用于标识表名和主键名称的特性类,假如Entity实体类上面没有标识主键名称,框架默认会用Entity类名作为表名,建议最好标识一下表名和主键名称。
NetUtility.Dapper.Core.TableInfoAttribute.cs
NetUtility.Da