fastcrud.ModelGenerator 修改表名称和主键

52 篇文章 0 订阅
3 篇文章 0 订阅

refs:

https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-indexes-transact-sql?view=sql-server-2017

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.

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值