Ok this is a bit strange. I am still having some issues with this custom ID generator. So far everything has been working well up until now, but today I decided to fix the test fixture base class I was using to start nHibernate. It was using SessionSource from Fluent instead of SessionFactory() and I didn't like that.
Here is the test Setup():
[SetUp]
public void SetupContext() {
var cfg = Fluently.Configure()
.Database(SQLiteConfiguration.Standard.InMemory()
.ProxyFactoryFactory(
"NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle")
.ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssembly(typeof (InvestSpecMap).Assembly)).BuildConfiguration();
new SchemaExport(cfg).Execute(true, true, false);
SessionFactory = cfg.BuildSessionFactory();
}
and here is a simple test:
[Test]
public void TestIdGeneratorOnMultipleInsert() {
using (var ses = SessionFactory.OpenSession()) {
using (var tx = ses.BeginTransaction())
foreach (var spec in Securities) {
ses.Save(spec);
}
}
Session.Flush();
Assert.AreEqual(1048577 + Securities.Length, Securities[Securities.Length -1].Id);
}
Here is the output of the test:
drop table if exists InvestSpec
drop table if exists InvestPrice
drop table if exists zSysCounters
create table InvestSpec (
InvestSpecId INTEGER not null,
UpdatedById INTEGER,
UpdateDate DATETIME,
AnnlzdDiv NUMERIC,
AssetClass TEXT,
CurrencyType INTEGER,
CusipNum TEXT,
DivFrequency TEXT,
FullName TEXT,
MaturityDt DATETIME,
PriceAsOfDt DATETIME,
AbbrName TEXT,
TaxTreatment TEXT,
TickerSymbol TEXT,
Type TEXT,
UnitPrice NUMERIC,
primary key (InvestSpecId)
)
create table InvestPrice (
InvestPriceId INTEGER not null,
UpdatedById INTEGER,
UpdateDate DATETIME,
MarketPrice NUMERIC,
EffectiveDt DATETIME,
InvestSpecId INTEGER,
primary key (InvestPriceId)
)
create table zSysCounters (
InvestSpec INTEGER,
InvestPrice INTEGER
)
insert into zSysCounters values ( 1, 1 )
NHibernate: select InvestSpec from zSysCounters
And finally the trace:
System.NullReferenceException: Object reference not set to an instance of an object.
at NHibernate.Exceptions.ADOExceptionHelper.Convert(ISQLExceptionConverter converter, Exception sqlException, String message, SqlString sql)
at NHibernate.Engine.TransactionHelper.Work.DoWork(IDbConnection connection, IDbTransaction transaction)
at NHibernate.Transaction.AdoNetTransactionFactory.ExecuteWorkInIsolation(ISessionImplementor session, IIsolatedWork work, Boolean transacted)
NHibernate.HibernateException: error performing isolated work
at
NHibernate.Transaction.AdoNetTransactionFactory.ExecuteWorkInIsolation(
ISessionImplementor session,
IIsolatedWork work,
Boolean transacted)
at
NHibernate.Transaction.AdoNetWithDistrubtedTransactionFactory.ExecuteWorkInIsolation(
ISessionImplementor session,
IIsolatedWork work,
Boolean transacted)
at
NHibernate.Engine.Transaction.Isolater.DoIsolatedWork(
IIsolatedWork work,
ISessionImplementor session)
at
NHibernate.Engine.TransactionHelper.DoWorkInNewTransaction(
ISessionImplementor session)
at
FDPDatabase.DataAccess.FDPGenerator.FdpSequenceGen.Generate(
ISessionImplementor session,
Object obj) in
FDPSequenceGen.cs: line 137
at
NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(
Object entity,
String entityName,
Object anything,
IEventSource source,
Boolean requiresImmediateIdAccess)
at
NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(
SaveOrUpdateEvent event)
at
NHibernate.Event.Default.DefaultSaveEventListener.SaveWithGeneratedOrRequestedId(
SaveOrUpdateEvent event)
at
NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(
SaveOrUpdateEvent event)
at
NHibernate.Event.Default.DefaultSaveEventListener.PerformSaveOrUpdate(
SaveOrUpdateEvent event)
at
NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(
SaveOrUpdateEvent event)
at
NHibernate.Impl.SessionImpl.FireSave(
SaveOrUpdateEvent event)
at
NHibernate.Impl.SessionImpl.Save(
Object obj)
at
ISMDataAdapter.Tests.FDPServiceTests.NHibernateTests.CrudTests.TestPriceCrud()
in
CrudTests.cs: line 36
If I run it using the debugger I get this exception thrown:
SQLite error
no such table: zSysCounters
Any help would be greatly appreciated. I am very confused as to why I am getting this behavior.