Ok, the problem is absolutely that I am updating the value of the ID
column differently than NHibernate is.
There is some sort of conversion going on with the data that gets put
into Sqlite.

This is the value that is in the database:
C74ECDE1B3241B4D84C29BCB0113448F   <-Hex(Id)

And this is the Guid value that resulted in that value.
E1CD4EC724B34D1B84C29BCB0113448F   <-Guid in code

Does anyone know what is happening to the value? What transformation
converts E1CD4EC724B34D1B84C29BCB0113448F into
C74ECDE1B3241B4D84C29BCB0113448F?

On Mar 13, 2:23 pm, brendanjerwin <[email protected]> wrote:
> Ok, its a little bit closer.
> The weird data I see in the DB is because it's a blob.
> The SQL I need to run to update the data is this:
>
> UPDATE Model SET ID = X'14BD459F027B4BD39C31AEA550B9808C'
>
> That results in a new weird looking blob value in the database. But,
> now when I run NHibernate still can't find the instance. NHProf tells
> me the query is:
>
> WHERE  model0_.ModelID = '14bd459f-027b-4bd3-9c31-aea550b9808c' /* @p0
> */
>
> And when I run that directly against the database I do, in fact, get
> no result. If I run this though:
>
> WHERE  model0_.ModelID = X'14bd459f027b4bd39c31aea550b9808c' /* @p0 */
>
> I get a result. Is the problem now that NHibernate is querying for the
> uniqueidentifier wrong? Or is it fact doing it right and what NHProf
> is showing me is not what was actually executed?
> (Is there a way to profile Sqlite directly?)
>
> On Mar 13, 1:37 pm, Brendan Erwin <[email protected]> wrote:
>
>
>
> > I think I might have a clue here.
>
> > Looking at the SQLite database before running my manual SQL I see that  
> > the uniqueidentifier column contains something very different than I  
> > was expecting:  BSä ` BM‰µ›Ë
>
> > I was expecting (and am updating the column to) something that looks  
> > like a GUID: 14BD459F-027B-4BD3-9C31-AEA550B9808C
>
> > My guess is that the Sqlite dialect is encoding the .NET Guid into  
> > something more appropriate for Sqlite. I need to do the same when I  
> > manually update the database. I'll start looking in that direction,  
> > any pointers?
>
> > On Mar 13, 2009, at 11:30 AM, James Gregory wrote:
>
> > > 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
-~----------~----~----~----~------~----~------~--~---

Reply via email to