refs:
http://www.bubuko.com/infodetail-1100958.html
1)
使用 Dapper.FastCrud.ModelGenerator 的T4模板会修改表名中的下划线,移除掉了下滑线,查看代码如下,注释掉相关代码即可。
Table tbl=new Table();
tbl.Name=rdr["TABLE_NAME"].ToString();
tbl.Schema=rdr["TABLE_SCHEMA"].ToString();
tbl.IsView=string.Compare(rdr["TABLE_TYPE"].ToString(), "View", true)==0;
tbl.CleanName=CleanUp(tbl.Name);
if(tbl.CleanName.StartsWith("tbl_")) tbl.CleanName = tbl.CleanName.Replace("tbl_","");
if(tbl.CleanName.StartsWith("tbl")) tbl.CleanName = tbl.CleanName.Replace("tbl","");
//tbl.CleanName = tbl.CleanName.Replace("_","");
//tbl.ClassName=Singularize(RemoveTablePrefixes(tbl.CleanName));
tbl.ClassName=Singularize(tbl.CleanName);
result.Add(tbl);
2)
使用fastDapper方便的方法是用主键方法,但这取决于它对主键的判断。有些表主键设置有问题,就会没有主键注释[Key],比如视图类型等,这时使用主键方法会报错。这段代码是找出表的主键的。
SELECT c.name AS ColumnName
FROM sys.indexes AS i
INNER JOIN sys.index_columns AS ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
INNER JOIN sys.objects AS o ON i.object_id = o.object_id
LEFT OUTER JOIN sys.columns AS c ON ic.object_id = c.object_id AND c.column_id = ic.column_id
WHERE (i.type = 1) AND (o.name = @tableName)
其中 sys.indexes中的type=1字段含义,
type tinyint Type of index:
0 = Heap
1 = Clustered
2 = Nonclustered
3 = XML
4 = Spatial
5 = Clustered columnstore index. Applies to: SQL Server 2014 (12.x) through SQL Server 2017.
6 = Nonclustered columnstore index. Applies to: SQL Server 2012 (11.x) through SQL Server 2017.
7 = Nonclustered hash index. Applies to: SQL Server 2014 (12.x) through SQL Server 2017.
即只取clustered类型的主键,所以有些table orm后没有加上key关键字,按primary key操作时,才会提示错误。
其他几个系统表含义见refs2
syscolumns
每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行。该表位于每个数据库中。
sysobjects
在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。只有在 tempdb 内,每个临时对象才在该表中占一行。
sys.indexes (Transact-SQL)
Contains a row per index or heap of a tabular object, such as a table, view, or table-valued function.