我正在使用 ServiceStack.ORMLite 实现存储库模式,如下所示:
public class MyRepository : IMyRepository
{
private IDbConnectionFactory DbConnectionFactory = null;
public MyRepository(IDbConnectionFactory dbConnectionFactory)
{
DbConnectionFactory = dbConnectionFactory;
}
public void MyMethod()
{
using (var connection = DbConnectionFactory.OpenDbConnection())
using (var cmd = connection.CreateCommand())
{
//Do something here
}
}
}
但当我需要在 DbTransaction 中扭曲某些数据库操作时,我不知道如何处理 DbTransaction。它看起来像TransactionScope http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx是一个解决方案,但我不知道是否太重了。
ServiceStack OrmLite https://github.com/ServiceStack/ServiceStack.OrmLite/使您可以访问 ADO.NET 的原始数据IDbConnection
and IDbTransaction
您应该使用的类而不是 TransactionScope 的类。您可以使用以下命令创建交易IDbConnection.OpenTransaction()
扩展方法,例如:
public class MyRepository : IMyRepository, IDisposable
{
private IDbConnectionFactory DbFactory { get; set; }
private IDbConnection db;
private IDbConnection Db
{
get { return db ?? (db = dbFactory.Open()); }
}
public void WithTransactions()
{
using (var trans = Db.OpenTransaction())
{
//Do something here
trans.Commit();
}
}
public List<Poco> WithoutTransactions()
{
return Db.Select<Poco>();
}
public void Dispose()
{
if (db != null)
db.Dispose();
}
}
因为它需要更少的代码,所以我更喜欢属性注入并使用 LazyDb
属性来简化我的方法的数据访问模式。
注意:每当您的任何类保留对开放的引用时IDbConnection
(像这个),它应该注册无/瞬态 or 请求范围因此连接在使用后会被释放(即不要将其注册为单例)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)