c# this 的用法 为原始类型扩展方法
2022/1/25 11:04:48
本文主要是介绍c# this 的用法 为原始类型扩展方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
扩展Exception,增加判断Exception是否为SQL引用约束异常方法!
在设计数据表时,如果将某些列设置为关联其它表的外键,那么如果对其进行增加、修改操作时,其关联表若没有相匹配的记录则报错,或者在对其关联表进行删除时,也会报错,这就是外键约束的作用,当然除了外键还有许多约束,在此暂不讨论,本篇文章主要讲的是,如何判断是否为SQL的引用约束异常,从而能够更好的将SQL复杂的报错转换为用户能够明白的友好提示。
扩展Exception,增加判断Exception是否为SQL引用约束异常方法(IsSqlReferenceConstraintException):
public static bool IsSqlReferenceConstraintException(this Exception except) { var baseEx = except.GetBaseException(); if (baseEx is SqlException) { string message = (baseEx as SqlException).Message; if (message.ToLower().Contains("reference constraint") || message.ToLower().Contains("foreign key")) { return true; } else { return false; } } else if (baseEx != null && !object.ReferenceEquals(except, baseEx))//如果基类不为空且不等于异常本身,则继续回调查找 { return IsSqlReferenceConstraintException(baseEx); } return false; }
原生的SQL报错信息如下:
The DELETE statement conflicted with the REFERENCE constraint "FK_dbo.Category_dbo.User_LastEditorID". The conflict occurred in database "mTEM", table "dbo.Category", column 'LastEditorID'.
The statement has been terminated.
而采用扩展方法则会显示出我们预定义的错误信息,调用如下:
public void Remove(int userID) { User user=this.repository.Get(t=>t.ID==userID); if (user != null) { try { this.repository.Remove(user, true); } catch (Exception ex) { if (ex.IsSqlReferenceConstraintException()) //判断为引用约束错误,则直接抛出我们自定义的错误 { throw new Exception("该账号已有与之相关联的其它业务记录,禁止删除!若确认该账号停止使用,可将其设置为禁用即可。"); } } } else { throw new Exception("该账号信息不存在或已被删除!"); } }
这篇关于c# this 的用法 为原始类型扩展方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#