Swo*_*ker 9 repository-pattern servicestack ormlite-servicestack
我正在使用ServiceStack.ORMLite实现Repository Pattern,如下所示:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我需要在DbTransaction中扭曲一些数据库操作时,我不知道如何处理DbTransaction.它看起来像是TransactionScope一个解决方案,但我不知道这是否太重了.
myt*_*thz 10
ServiceStack OrmLite使您可以访问ADO.NET的原始类IDbConnection和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();
}
}
Run Code Online (Sandbox Code Playgroud)
由于它需要更少的代码,我更喜欢属性注入,并使用Lazy Db属性来简化我的方法的数据访问模式.
注意:每当您的任何类都保持对open IDbConnection(如此)的引用时,它应该使用None/Transient或RequestScope注册,以便在使用后将连接丢弃(即不将其注册为单例).
| 归档时间: |
|
| 查看次数: |
5936 次 |
| 最近记录: |