【发布时间】:2012-07-25 09:11:03
【问题描述】:
概述
我正在尝试连接 Autofac 以帮助在我的 MVC 4 RC 项目中管理 NHibernate 的 ISession。据我了解,Autofac 应该按照我配置的方式在每个 HTTP 请求结束时调用ISession.Dispose(见下文)。但是,情况似乎并非如此——如果我不调用ISession.Flush(),则数据不会保存在数据库中。
配置
Autofac
container.Register(c => DbConfig.Generate(connectionString).BuildSessionFactory())
.As<ISessionFactory>()
.SingleInstance();
container.Register(c => c.Resolve<ISessionFactory>().OpenSession())
.As<ISession>()
.InstancePerLifetimeScope();
container.RegisterGeneric(typeof(Repository<>))
.As(typeof(IRepository<>))
.InstancePerLifetimeScope();
存储库
public class Repository<T> : IRepository<T> where T : class
{
protected readonly ISession Session;
public Repository(ISession session)
{
Session = session;
}
public void Add(T entity)
{
Session.Save(entity);
}
}
数据库种子(Application_Start)
public class DatabaseSeed
{
public static void Seed(IContainer container)
{
var session = container.Resolve<ISession>();
var userRepo = container.Resolve<IRepository<User>>();
userRepo.Add(new User { Id = 5, Name = "Test User" });
//session.Flush(); <-- if not called, user will not be persisted!
}
}
结束语
我知道我应该将其包装在交易中。但是,我想在进入更复杂的场景之前先掌握基础知识,我很困惑为什么上面的方法不能像我预期的那样工作......
(作为旁注,我尝试运行 Whitebox,Autofac 的“分析器”,但它在我身上失败了,但有一些例外(发布在 Autofac 组@Google 上),所以我不完全确定它是否是 Autfac这是在取笑我或 NHibernate :-)
【问题讨论】:
标签: nhibernate asp.net-mvc-4 autofac