Ответ 1
Не уверен, что вам нужны шаблоны Repository + UnitOfWork, но я думаю, что есть несколько альтернативных решений в ServiceStack + OrmLite, которые сохраняют ваш код "СУХОЙ", прежде чем вам понадобится ввести какие-либо шаблоны (особенно если вы в основном ищете транзакцию/откат поддержка). Что-то вроде ниже, где я начну.
public class Foo //POCO for data access
{
//Add Attributes for Ormlite
public int Id { get; set; }
}
public class Bar //POCO for data access
{
//Add Attributes for Ormlite
public int Id { get; set; }
}
//your request class which is passed to your service
public class DeleteById
{
public int Id { get; set; }
}
public class FooBarService : MyServiceBase //MyServiceBase has resusable method for handling transactions.
{
public object Post(DeleteById request)
{
DbExec(dbConn =>
{
dbConn.DeleteById<Foo>(request.Id);
dbConn.DeleteById<Bar>(request.Id);
});
return null;
}
}
public class MyServiceBase : Service
{
public IDbConnectionFactory DbFactory { get; set; }
protected void DbExec(Action<IDbConnection> actions)
{
using (var dbConn = DbFactory.OpenDbConnection())
{
using (var trans = dbConn.OpenTransaction())
{
try
{
actions(dbConn);
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw ex;
}
}
}
}
}
Некоторые ссылки...
https://github.com/ServiceStack/ServiceStack.RedisWebServices - приведенный выше код изменен из этого примера
https://groups.google.com/forum/#!msg/servicestack/1pA41E33QII/R-trWwzYgjEJ - обсуждение слоев в ServiceStack
http://ayende.com/blog/3955/repository-is-the-new-singleton - Айенде Рахиен (основной вкладчик NHibernate) в шаблоне репозитория