【发布时间】:2013-10-09 00:41:35
【问题描述】:
我正在尝试使用IDbConnection、IDbCommand 和IDbDataParameter 类型的泛型使我的类库与尽可能多的数据库系统兼容,但在可能的情况下支持IDbTransaction 的事务绝对是更可取的.但是,IDbConnection 的某些实现不支持事务(想到 MySQL/MyISAM)。
如何确定IDbConnection 的具体实现是否支持事务?
明确一点,我想支持不支持事务的数据库后端,但如果可以使用则默认为事务。
【问题讨论】:
-
如果你需要一个事务,你的方法签名难道不能简单地要求一个
IDbTransaction而不是IDbConnection吗?IDbTransaction仍然暴露原始的IDbConnection。为什么你需要知道这些信息?您可以提供类似Execute方法的重载:stackoverflow.com/a/14102615/251983 - 然后用户可以选择连接或事务。 -
这是否适用于不支持事务的数据库的
IDbConnection实现?在这种情况下,我希望NotSupportedException。 -
这成为调用者的责任。如果您的 taansactionalized 方法只是一个重载,那么调用者不会在不支持事务的实现上使用它们。 IMO 你不能为你图书馆的消费者做出这个决定,因为你不知道他们将如何使用它。仅供参考,看起来 MySQL 有一个事务实现 devart.com/dotconnect/mysql/docs/… 但完全披露,我从未使用过它。
标签: c# .net database database-connection compatibility