使用Entity Framework作为ORM框架应该是绝大多数项目的选择,使得我们操作数据库变得简单方便;但是我们操作数据库,绝对是无法避免数据库发生异常的情况,数据库针对每一种异常也都会提供一个编码来指定异常。
但是编码对于我们阅读很不友好,我们还需要查阅相关文档,才能明白其中的意思,而且不同数据库的编码还不一样。
今天就给大家推荐一个开源项目,可以完美解决此问题。.
01项目简介
EntityFramework.Exceptions是一个针对Entity Framework解决在异常处理方面的一些问题,为开发人员提供更好的异常处理和错误信息。
该项目将Entity Framework的异常转换为更具可读性的异常信息,并提供更详细的错误描述,以便开发人员更好地理解和解决问题,从而有助于减少调试和修复问题的时间,从而提高开发效率。
该项目支持的数据库有:SQLServer, PostgreSQL, SQLite, Oracle 和 MySql。
02项目结构
项目解决方案
03使用方法
下面我们对比:传统处理异常和使用该项目处理异常的区别:
以下例子:插入两个相同的产品名称,传统写法代码如下:
using (var demoContext = new DemoContext())
{
demoContext.Products.Add(new Product
{
Name = "产品1",
Price = 1
});
demoContext.Products.Add(new Product
{
Name = "产品1",
Price = 10
});
try
{
demoContext.SaveChanges();
}
catch (DbUpdateException e)
{
var sqlException = e.GetBaseException() as SqlException;
//编码:2601,违反唯一索引规范
if (sqlException != null && sqlException.Number == 2601)
{
//违反了唯一索引,记录日志
Log("产品名称重复,请检查产品名称!")
}
}
}
using (var demoContext = new DemoContext())
{
demoContext.Products.Add(new Product
{
Name = "产品1",
Price = 1
});
demoContext.Products.Add(new Product
{
Name = "产品1",
Price = 10
});
try
{
demoContext.SaveChanges();
}
catch (UniqueConstraintException e)
{
//违反了唯一索引,记录日志
Log("产品名称重复,请检查产品名称!")
}
}
以上的代码,UniqueConstraintException 就是该项目已经为我们定义好的异常,我们在使用的时候就无需关系具体编码,而且不同数据库的编码是不一样的,我们也无需关心。
04项目地址
https://github.com/Giorgi/EntityFramework.Exceptions