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
-~----------~----~----~----~------~----~------~--~---

Reply via email to