gpt4 book ai didi

nhibernate - 使用 nHibernate 检索数据库架构

转载 作者:行者123 更新时间:2023-12-01 10:13:32 25 4
gpt4 key购买 nike

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

我希望以编程方式获取数据库元数据/架构。

我正在使用 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 : Dialect does not support identity key generation

我怀疑这只会根据您创建的映射生成模式?我没有创建任何映射。这个想法是这将适用于我连接到的任何数据库并为其生成模式。

问题:我是否相信此方法只会根据我的映射生成架构?如果没有,我是否正确使用它?

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

提前致谢。

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

最佳答案

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

具体问题的答案:

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

方法二:SchemaExport 根据映射定义创建 SQL 文件(创建表、索引等)。实际上推荐使用它,除非你需要处理遗留数据库。输出文件应称为 *.sql,而不是 *.dll。

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

结论:

我不知道有什么工具可以从数据库表创建 NHibernate 映射文件。可能有一个,很可能它不是免费的或不成熟的(否则它会广为人知)。因此,我建议考虑改为生成表定义,或者,如果您有遗留数据库,则需要手动编写映射文件。

关于nhibernate - 使用 nHibernate 检索数据库架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3478343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com