RMa*_*lke 8 nhibernate servicestack
我开始构建一个应用程序,我打算使用ServiceStack.只是想知道处理NHibernate ISession的最佳实践/好方法是什么,或者其他"每个请求"特定于上下文的会话对象.
我想在Ioc中注册一个ISessionFactory,如:
container.Register<ISessionFactory>(sessionFactory);
Run Code Online (Sandbox Code Playgroud)
并在需要时获取一个新的Session对象......或者可以直接提供会话对象:
container.Register<ISession>(c => sessionFactory.OpenSession()).ReusedWithin(ReuseScope.None);
Run Code Online (Sandbox Code Playgroud)
或者通过Global.asax BeginRequest事件处理ISession和默认事务:
protected void Application_BeginRequest(object sender, EventArgs e)
{
var session = factory.OpenSession();
ITransaction itrans = session.BeginTransaction();
Context.Items.Add("session", session);
Context.Items.Add("trans", itrans);
}
Run Code Online (Sandbox Code Playgroud)
所以,我有点迷茫,在上述技术或类似的技术(如EF或其他Rest-Services框架)下,最佳实践是什么?
提前致谢
请参阅这篇博客文章,了解如何最佳地结合使用 ServiceStack 和 NHibernate 的完整示例:
http://www.philliphaydon.com/2012/06/using-nhibernate-with-servicestack/ 这是上面帖子中使用的 AppHost 示例:
public class Global : HttpApplication
{
public class SampleServiceAppHost : AppHostBase
{
private readonly IContainerAdapter _containerAdapter;
public SampleServiceAppHost(ISessionFactory sessionFactory)
: base("Service Stack with Fluent NHibernate Sample", typeof(ProductFindService).Assembly)
{
base.Container.Register<ISessionFactory>(sessionFactory);
}
public override void Configure(Funq.Container container)
{
container.Adapter = _containerAdapter;
}
}
void Application_Start(object sender, EventArgs e)
{
var factory = new SessionFactoryManager().CreateSessionFactory();
(new SampleServiceAppHost(factory)).Init();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2730 次 |
| 最近记录: |