62,046
社区成员
发帖
与我相关
我的任务
分享
拷贝表的生成语句,贴到新建类里,做几下文本替换就OK了,换上类型,{get;set;}搞定
db.Set(obj);
这样的代码就能把任意的 c# 普通对象写入数据库,而不需要去生成什么 Model 类。要知道你的程序中一边设计以便产生的数据 class 有多少?你又有多少要专门维护 Model 模式? private string GetTableAndFieldInfoSql(string schemaName, string tableName, bool isOrder = true)
{
var sql = @"SELECT CASE
WHEN col.colorder = 1
THEN obj.name
ELSE ''
END AS 表名,
col.colorder AS 序号,
col.name AS 列名,
ISNULL(ep.[value], '') AS 列说明,
t.name AS 数据类型,
col.length AS 长度,
ISNULL(COLUMNPROPERTY(col.id, col.name, 'Scale'), 0) AS 小数位数,
CASE
WHEN COLUMNPROPERTY(col.id, col.name, 'IsIdentity') = 1
THEN '√'
ELSE ''
END AS 标识,
CASE
WHEN EXISTS
(
SELECT 1
FROM dbo.sysindexes si
INNER JOIN dbo.sysindexkeys sik ON si.id = sik.id
AND si.indid = sik.indid
INNER JOIN dbo.syscolumns sc ON sc.id = sik.id
AND sc.colid = sik.colid
INNER JOIN dbo.sysobjects so ON so.name = si.name
AND so.xtype = 'PK'
WHERE sc.id = col.id
AND sc.colid = col.colid
)
THEN '√'
ELSE ''
END AS 主键,
CASE
WHEN col.isnullable = 1
THEN '√'
ELSE ''
END AS 允许空,
ISNULL(comm.text, '') AS 默认值
FROM dbo.syscolumns col
LEFT JOIN dbo.systypes t ON col.xtype = t.xusertype
INNER JOIN dbo.sysobjects obj ON col.id = obj.id
AND obj.xtype = 'U'
AND obj.STATUS >= 0
INNER JOIN sys.all_objects allObj ON allObj.object_id = obj.id
INNER JOIN sys.schemas s ON allObj.schema_id = s.schema_id
LEFT JOIN dbo.syscomments comm ON col.cdefault = comm.id
LEFT JOIN sys.extended_properties ep ON col.id = ep.major_id
AND col.colid = ep.minor_id
AND ep.name = 'MS_Description'
LEFT JOIN sys.extended_properties epTwo ON obj.id = epTwo.major_id
AND epTwo.minor_id = 0
AND epTwo.name = 'MS_Description'
WHERE obj.name = '" + tableName + @"'--表名
AND s.name = '" + schemaName + @"' --架构名";
if (isOrder)
{
sql += " ORDER BY col.colorder ";
}
return sql;
}
可以参考此方法实现~
EntryItems = db.CreateCommand("select * from [AccountingEntry$$Item] where ParentId=@id and [科目]=N'应收保险公司手续费'")
.SetParam("id", ParentId)
.ExecuteList(r => new EntryItem
{
产品 = r.GetValue<string>("产品"),
TagMoney1 = r.GetValue<decimal>("TagMoney1"),
金额 = r.GetValue<decimal>("金额")
});