gpt4 book ai didi

nhibernate - 运行测试时由 Mappings 中的 GeneratedBy 语句引起的错误

转载 作者:行者123 更新时间:2023-12-03 23:26:31 25 4
gpt4 key购买 nike

我在具有 Oracle 10g 数据库的项目上使用 Fluent NHibernate。我还将 SQLite 与从我的映射生成的模式一起用于测试。我遇到的问题是,由于我的表上的主键是由 Oracle Sequences 生成的,为了让我的 Add 方法正常工作,我必须将 .GeneratedBy.Sequence({sequence name}) 添加到每个的 Id 字段我的映射使映射看起来像这样:

public CustomerMap()
{
Id(x => x.Id)
.Column("Cust_Id")
.GeneratedBy.Sequence("SEQ_CONTNT_AREA");
...
{More Mapping Code}
...
}

一旦我将 GeneratedBy.Sequece 添加到我的映射中,我的所有测试都开始失败,给我以下错误:
----> NHibernate.MappingException : could not instantiate id generator
----> NHibernate.MappingException : Dialect does not support sequences

这些错误对我来说很有意义,因为 SQLite 不使用 Oracle 序列来生成主键。但是,如果我将映射更改为使用 GeneratedBy.Native(),我的所有测试都会通过,但是当我运行应用程序时,在尝试插入新记录时出现以下错误:
InnerException = {System.Data.OracleClient.OracleException: ORA-02289: sequence does not exist
at System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc)
at System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle stateme...

Message: "could not get next sequence value[SQL: select hibernate_sequence.nextval from dual]" string

此错误消息向我表明 NHibernate 要么找不到为该表创建主键所需的序列,要么甚至没有查找它。在任何一种情况下,它似乎都试图使用 'hibernate_sequence' 来获取它显然无法找到的值,因为它不存在。

我想我可能错过了一些非常简单的东西,因为我对 NHibernate 还很陌生。让测试和代码尽快运行非常重要,因为我将把这个项目交给其他人,他们的 NHibernate 经验甚至比我下周去上类时的 NHibernate 经验还要少。

最佳答案

我知道这是一个巨大的黑客,但你能做这样的事情吗?

public CustomerMap()
{
if (SomeStaticClass.IsRunningUnitTests)
{
Id(x => x.Id)
.Column("Cust_Id")
.GeneratedBy.Native();
}
else
{
Id(x => x.Id)
.Column("Cust_Id")
.GeneratedBy.Sequence("SEQ_CONTNT_AREA");
}

...
{More Mapping Code}
...
}

关于nhibernate - 运行测试时由 Mappings 中的 GeneratedBy 语句引起的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1820750/

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