在选择Fluent nHibernate之前,我应该关心/了解nHibernate吗?

时间:2010-06-16 04:37:18

标签: nhibernate orm fluent-nhibernate

我正在浏览Fluent nhibernate wiki,我知道Fluent nhibernate建立在nHibernate之上......在选择Fluent nHibernate之前,我应该关心/了解nHibernate吗?任何建议......

5 个答案:

答案 0 :(得分:2)

绝对需要来学习NHibernate。流畅的NHibernate只是NHibernate的映射 API的包装器,映射只是使用NHibernate的一小部分。

查询(Criteria / HQL / LINQ),会话,锁定,延迟/急切加载等是使用NHibernate时必须知道的概念,与Fluent NHibernate无关。

答案 1 :(得分:1)

当然,流畅的nhibernate主要是为了使映射更简单(和类型安全)

答案 2 :(得分:1)

我说是的。如果您了解NHibernate的基于XML的映射格式,通过流畅的NH [FluentMappingsContainer].ExportTo([e.g. Environment.CurrentDirectory])来跟踪错误要容易得多。

编辑:ASP.NET MVC示例w / StructureMap

StructureMap:

 private static void ConfigureSQLiteInMemoryTest(IInitializationExpression init)
        {
            init.For<ISessionFactory>()
                .Singleton()
                .Use( Fluently.Configure()
                          .Database( SQLiteConfiguration.Standard.InMemory().AdoNetBatchSize( 100 ).ShowSql )
                          .Mappings( m => m.FluentMappings.AddFromAssemblyOf<MyEntity>() )
                          .ExposeConfiguration( config =>
                                                    {
                                                        config.SetProperty( NHEnvironment.ProxyFactoryFactoryClass,
                                                                            typeof( ProxyFactoryFactory ).AssemblyQualifiedName );   

                                                    } )
                          .BuildSessionFactory() );

            init.For<ISession>()
                .LifecycleIs( GetLifecycle() )
                .Use( context =>
                          {
                              var session = context.GetInstance<ISessionFactory>().OpenSession();

                              new TestData( session, _nhConfig ).Create();

                              return session;
                          } );
        }

告诉MVC使用基于StructureMap的控制器工厂:

的Global.asax.cs:

protected void Application_Start()
        {
            [...]

            var controllerFactory = new StructureMapControllerFactory( ObjectFactory.Container );

            ControllerBuilder.Current.SetControllerFactory( controllerFactory );

            [...]

        }

public class StructureMapControllerFactory : DefaultControllerFactory
    {
        private readonly IContainer _container;

        public StructureMapControllerFactory( IContainer container )
        {
            _container = container;
        }

        protected override IController GetControllerInstance( RequestContext requestContext, Type controllerType )
        {
            if (controllerType == null)
                return null;

            return (IController)_container.GetInstance( controllerType );
        }
    }

答案 3 :(得分:1)

是!

如果你至少不了解NHibernate的基础知识,你将完全迷失。 NHibernate是一个复杂的工具,流畅的NHibernate实际上只是使它更方便 - 它不会隐藏复杂性。

答案 4 :(得分:0)

为教程

尝试这个问题的答案

Where can i find a Fluent NHibernate Tutorial?

在学习流利的nhibernate之前掌握NHibernate是有道理的。正如@Jaguar所说,它位于nhibernate之上。

可能值得一看nhlambdaextensions.googlecode.com - 虽然这将包含在下一个版本中!

对于Nhibernate教程,请查看dimecasts或tekpub - 或者nhibernate.info - 参见问题

Learning NHibernate

NHibernate与数据库无关。 :)