流畅的NHibernate - 自动架构构建

时间:2009-08-01 01:42:21

标签: c# asp.net sql nhibernate fluent-nhibernate

好的,我有一个数据库,但没有表格。我有一些实体类。我正在尝试将Fluent NH设置为使用自动模式导出进行自动化。

首先,这是可能的,对吧?

其次,如果是这样,我在这里做错了什么:

   private ISessionFactory CreateSessionFactory()
    {
        return Fluently.Configure()
            .Database(MsSqlConfiguration.MsSql2005
                .ConnectionString(c => c.Is(@"Data Source=foo;Initial Catalog=bar;Integrated Security=True")))
            .Mappings(m => m.AutoMappings.Add(AutoPersistenceModel.MapEntitiesFromAssemblyOf<Employee>()
                                                  .Where(t => t.Namespace.Contains("Entities"))))
            .ExposeConfiguration(BuildSchema)
            .BuildSessionFactory();
    }

    private void BuildSchema(Configuration cfg)
    {
        new SchemaExport(cfg).Create(false, true);
    }

我在上面的“.Where”行上收到错误“对象引用未设置为对象的实例”。如果我取出.Where条件,我会收到一个错误“无法对ContainsGenericParameters为true的类型或方法执行后期绑定操作。”

编辑:

一些其他信息:我更改了.Where语句,专门概述了要包含的实体。即“.Where(t =&gt; t.Name.Contains(”Employee“)”等。当我这样做时,我收到了一个关于缺少依赖项的错误(NHibernate.ByteCode.Castle)。当我解决了这个问题时,它可以正常工作很好。我仍然不明白为什么这有用。

1 个答案:

答案 0 :(得分:1)

我相信NHibernate.ByteCode.Castle程序集用于在NHibernate中创建代理类。

我猜测当您尝试创建Schema或Configuration时,需要引用代理生成器。这就是为什么添加引用可以解决您的问题。

您可以在此处阅读有关NHibernate代理的一些内容:http://nhforge.org/blogs/nhibernate/archive/2008/11/09/nh2-1-0-bytecode-providers.aspx