2
我有一個問題,使用nHibernate和Rhino.Security。經過幾個小時的努力纔得到正確的配置設置,我終於得到了沒有任何錯誤的代碼運行。但是,除非我調用session.Flush(),否則不會將條目保存到數據庫。NHIbernate&Rhino-Security不保存,除非我打電話session.Flush()
查看網上的各種示例;我不應該調用flush。
這裏是我的配置代碼:
var cfg = new Configuration()
.SetProperty(Environment.ConnectionDriver, typeof(SqlClientDriver).AssemblyQualifiedName)
.SetProperty(Environment.Dialect, typeof(MsSql2008Dialect).AssemblyQualifiedName)
.SetProperty(Environment.ConnectionString, "………")
.SetProperty(Environment.ProxyFactoryFactoryClass, typeof(ProxyFactoryFactory).AssemblyQualifiedName)
.SetProperty(Environment.ReleaseConnections, "on_close")
.SetProperty(Environment.UseSecondLevelCache, "true")
.SetProperty(Environment.UseQueryCache, "true")
.SetProperty(Environment.CacheProvider, typeof(HashtableCacheProvider).AssemblyQualifiedName)
.AddAssembly("GA.CAP.Website")
;
Security.Configure<AspNetUser>(cfg, SecurityTableStructure.Prefix);
var factory = cfg.BuildSessionFactory();
var session = factory.OpenSession();
var authorizationRepository = new AuthorizationRepository(session);
IoC.Container.RegisterInstance<IAuthorizationRepository>(authorizationRepository);
var permissionBuilderService = new PermissionsBuilderService(session, authorizationRepository);
IoC.Container.RegisterInstance<IPermissionsBuilderService>(permissionBuilderService);
var permissionService = new PermissionsService(authorizationRepository, session);
IoC.Container.RegisterInstance<IPermissionsService>(permissionService);
var authService = new AuthorizationService(permissionService, authorizationRepository);
IoC.Container.RegisterInstance<IAuthorizationService>(authService);
測試代碼:
authorizationRepository.CreateUsersGroup("GAAdmins");
var group = authorizationRepository.GetUsersGroupByName("GAAdmins");
的GetUsersGroupByName調用返回null。如果我在這兩個調用之間添加一個session.Flush調用,它會正常工作並返回該組。
根據各個博客的例子,如this one,我不應該調用flush。此外,包括在Rhino.Security代碼不做任何沖洗測試用例如下所示:
這是直出Rhino.Security的測試用例夾具:
// on first deploy
Operation operation = authorizationRepository.CreateOperation("/Account/View");
// when creating account
UsersGroup group = authorizationRepository.CreateUsersGroup("Belongs to " + account.Name);
// setting permission so only associated users can view
permissionsBuilderService
.Allow(operation)
.For(group)
.On(account)
.DefaultLevel()
.Save();
// when adding user to account
authorizationRepository.AssociateUserWith(user, group);
bool allowed = authorizationService.IsAllowed(user, account, "/Account/View");
Assert.True(allowed);
有一些設置我我在某處失蹤?
感謝,
裏克
我已重新閱讀您的問題,並刪除了我的答案,因爲它沒有解決您的具體問題。對於那個很抱歉! – Sam 2010-08-26 04:36:59
我還沒有使用過NHibernate,但是這個行爲聽起來對於我已經使用過的其他ORM框架是正確的--GetUsersGroupByName大概做了一個sql調用並且組沒有被寫入(除非你做了Flush)。 除非auth回購是保留自己的寫緩存(不只是讀取緩存),可用於履行讀取請求,這似乎是By Design。 既然你提到'各種博客中的例子',大家分享這些?我想了解更多關於NHibernate的信息,當然,也許我可以在這裏幫助啓動:) – 2010-08-26 04:58:47
我在帖子底部添加了一個鏈接和一個代碼示例。 – rboarman 2010-08-26 15:04:40