These records that you're manipulating, are they inserted by NH originally?
If so then NH might still be doing some caching. Have you tried a
session.Refresh()? Although I don't know why that would be different to
destroying it and getting a new session.
On Fri, Mar 13, 2009 at 3:24 PM, Brendan Erwin <[email protected]>wrote:
> I've got a strange situation, which I'm sure is outside of the normal use
> cases, that is giving me fits.
> In order to facility some certain testing I've added an initialization mode
> to my application which configures NHibernate (via fluent-nhibernate's
> fluentlyConfigure) to use a SQLite database, generates the schema from the
> domain model, populates the database with some instances by creating
> transient models and saving them, and then uses direct (via
> Session.Connection) SQL to manipulate the database.
>
> Most of that works just fine, but my problem is that once I've messed with
> the database via SQL directly (the direct SQL manipulation is changing the
> ID of some of the instances in the DB), NHibernate wont give me an instance
> which I know is in the database.
>
> So, shortly:
>
> When I manipulate an object's ID directly in the database how do I get
> NHibernate to work? I have destroyed and recreated my session already, do I
> need to recreate the SessionFactory? I'm not using the second-level cache so
> that answer doesn't seem right.
>
> I'm sure I'm missing something stupid simple here... what is it?
>
>
> *Some of the code in question:*
>
> * **SQLiteUtil*.SetupSqlite(*"INTEGRATION"**,**true**
> ,sessionInstanceScope);*
> * **SQLiteUtil*.InitializeData(() =>
> * {*
> * **//Create and save domain objects here...*
> * });*
> * SQLiteUtil.InitializeData(()=>
> {
> //Fix the Model ID so that we know what it is outside
> SQLiteUtil.ExecuteSqlScript("UPDATE ModelTable SET ID =
> '14BD459F-027B-4BD3-9C31-AEA550B9808C'");
> });
> *
>
>
> *The configuration code:*
> * **public** **static** **void** SetupSqlite(**FileInfo**databaseFile,
> **bool** generateSchema, **InstanceScope** sessionInstanceScope)*
> * {*
> * NHibernate.Cfg.**Configuration** cfg;*
> * Models.Data.Util.**Configuration*.ConfigureDataAccess(*
> SQLiteConfiguration*.Standard.UsingFile(databaseFile.FullName),
> sessionInstanceScope, *out** cfg);*
>
> * **var** session = **ObjectFactory*.GetInstance<*ISession*>();
> * session.FlushMode = **FlushMode*.Commit;
>
> * **var** connection = session.Connection;*
>
> * **if** (!generateSchema) **return**;*
>
> * **var** _dialect = **Dialect*.GetDialect(cfg.Properties);
> * **var** drops = cfg.GenerateDropSchemaScript(_dialect);*
> * ExecuteSqlScripts(drops);*
>
> * **var** scripts = cfg.GenerateSchemaCreationScript(_dialect);
> *
> * ExecuteSqlScripts(scripts);*
> * }*
>
> Initialize Data:
>
> * **///** **<summary>*
> * **///** Sets up data in the database. Perform your domain model
> saves within the code block.*
> * **///** **</summary>*
> * **public** **static** **void**
> InitializeData(**Action**setupTestDataAction)
> *
> * {*
> * **var** theSession = **ObjectFactory*.GetInstance<*ISession*
> >();
> * **try*
> * {*
> * theSession.BeginTransaction();*
> * setupTestDataAction();*
> * theSession.Transaction.Commit();*
> * }*
> * **catch** (**Exception** ex)*
> * {*
> * **if** (theSession != **null**)*
> * theSession.Transaction.Rollback();*
> * **throw**;*
> * }*
> * }*
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---