gpt4 book ai didi

c# - Nhibernate 数据库独立错误处理

转载 作者:行者123 更新时间:2023-12-03 07:50:16 24 4
gpt4 key购买 nike

试图为我的最后一个问题 (https://stackoverflow.com/questions/29539767/sql-nhibernate-exceptions-with-sqlite-and-c-sharp-and-known-error-codes) 找到解决方案,我决定用我自己的自定义错误来包装所有异常。到目前为止,这是我的代码:

    public Exception Convert(NHibernate.Exceptions.AdoExceptionContextInfo exInfo)
{
var sqle = (System.Data.SQLite.SQLiteException)exInfo.SqlException;
var errorDescription = exInfo.SqlException.Message.ToString();
if (sqle != null)
{
//Definition of error codes (for SQLite) to catch and handle
switch (sqle.ErrorCode)
{
//Most possible error in our project: case 19
case 19:
return new ConstraintViolationException(exInfo.Message,
sqle.InnerException);
case 5:
return new DbLockedException();
case 6:
return new TableLockedException();
case 8:
return new ReadOnlyDbException();
case 9:
return new InterruptException();
case 10:
return new IOException();
case 11:
return new DbCorruptException();

我从这里遵循了自定义异常的想法: Returning a custom exception

现在我面临一个问题:

因为我们正在使用 NHibernate。我们希望保持我们的代码数据库独立。使用您可以看到的代码,它只适用于 SQLite。
  • 有谁知道或对我如何管理错误有一些想法
    无论我使用哪个数据库,都能捕获它们?

  • 如果你想让你的程序独立于数据库,代码错误不是一个好主意,因为每个数据库都有自己的代码错误和异常。

    感谢您的提醒!

    最佳答案

    我将依赖于数据库的设置封装在专用程序集中:

  • MyApplication.Data.SqlLite
  • MyApplication.Data.Oracle

  • 每个程序集都包含一组实现公共(public)接口(interface)的类,以放入一个公共(public)程序集中。在你的情况下,我会创建一个名为 DbExceptionConverter 的接口(interface)以及在他们的程序集中的实现。在应用程序开始时,我会在容器中注册正确的实现。

    您也可以将它们全部放在一个抽象工厂中。

    关于c# - Nhibernate 数据库独立错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29627403/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com