使用nHibernate检索数据库模式

时间:2010-08-13 15:26:24

标签: nhibernate schema

是否可以从nHibernate生成数据库的模式,我已经为nHibernate提供了数据库的配置,但我没有编写任何映射。

我希望以编程方式获取Database MetaData / Schema。

我正在使用Oracle数据库。我尝试了两种方法:

接近一个方法:

    public DatabaseMetadata GetMetadata(DbConnection connectionIn)
    {
        return new DatabaseMetadata(connectionIn, _dialect);
    }

问题: 然而,这似乎是我需要的,虽然它正确连接,但它没有拿起任何我的表。我提供的只是nHibernate Configuration对象,它填充了我的nHibernate.xml.config文件(连接字符串,驱动程序客户端等)的内容。

问题: 为什么不返回表格数据?它连接正确但什么也没找到!

方法二:

 public void DatabaseSchema()
 {
     var schema = new SchemaExport(nHibernateConfiguration);
     schema.SetOutputFile("schema.dll");
      schema.Create(true, true);
 }

nHibernateConfiguration是nHibernate配置对象的实例(类的属性),填充了nHibernate.xml.config类中的内容。

问题: 这根本不起作用。崩溃时出现以下异常:

  

NHibernate.MappingException:方言   不支持身份密钥   代

我怀疑这只会根据您创建的映射生成架构?我没有创建映射。这个想法是这将对我连接的任何数据库起作用,为它生成一个模式。

问题: 我相信这个方法只会根据我的映射生成一个Schema吗?如果没有,我是否正确使用它?

希望这很清楚,如果我需要提供更多信息,请发表评论。

先谢谢。

要明确:我有一个数据库,想要获取代表数据库的元数据,一个模式。

3 个答案:

答案 0 :(得分:3)

有几种工具可以帮助你,但我使用的最多的是以下两种。

  1. NHibernate Schema Tool
  2. NHibernate Mapping Generator
  3. 如果您已有模式,则可以使用NHibernate Mapping Generator创建映射。然后,您可以根据需要使用映射。修改它们并使用NHibernate Schema Tool来管理实际的模式。

    如果您没有任何架构,而这正是您要创建的,那么您就是在正确的轨道上。首先,您需要“映射”您的课程。最好使用像Michael Maddox建议的Fluent NHibernate或ConfORM。

    我不知道这个的目的。如果是数据库模式管理,我建议不要使用NHibernate。 NHibernate从未被开发为模式管理器工具,所以它可能不应该以这种方式使用。不可否认,我可能会以某种方式误解你,这个答案可能是完全错误的。

答案 1 :(得分:3)

NHibernate实际上是基于映射文件。您可以从中生成类或表。有一些工具可以生成映射文件,但它们基于类,而不是表。

您特定问题的答案:

方法一: NHibernate不会从数据库中读取表定义。需要在映射文件中指定所有表定义。

方法二: SchemaExport从映射定义创建一个SQL文件(创建表,索引等)。实际上建议使用它,除非您需要处理旧数据库。输出文件应该被称为* .sql,而不是* .dll。

您获得的错误很可能是因为您尝试在oracle数据库(或其他不支持标识列的数据库)上创建标识标识。改为使用hilo(或者,如果你不喜欢它,请使用guid.comb或native)。我只是想知道你为什么会得到这个错误,我以为你没有写任何映射文件?

结论:

我不知道从数据库表创建NHibernate映射文件的任何工具。可能有一个,很可能它不是免费的或不成熟的(因为否则它将是众所周知的)。所以我建议考虑生成表定义,或者,如果你有遗留数据库,你需要手动编写映射文件。

答案 2 :(得分:1)

我可能会错误地解释这个问题,但是你所要求的并不是很清楚。

假设您已经创建了类并正确配置了NHibernate,并且您希望在数据库中为这些类创建表,那么您至少有两种可能的方法来尝试生成数据库而不创建NHibernate映射,这两种方法都可能起作用至少有一些关于如何进行映射的提示更好:

Fluent NHibernate Automapper

ConfORM

两种选择都有一个不错的学习曲线。

另一种选择是尝试NHibernate的商业视觉设计师之一,尽管这些工具还不够成熟,不能在我的经验中做到这一点。

核心NHibernate不是设计用于创建没有映射文件的表。