Thursday, April 28, 2005

NHibernate and ASP.NET - Part 2

After some toying around, I have my first object Saving/Updating/Deleting and using a GetAll method to bind to a Datagrid. All of this with about 5 or 6 lines of UI code! Yummy!

I still have some design concerns to wrinkle out, though. Here's how I have mine set up:

public class NHManager
{
public NHManager()
{
//load config

//create session factory
}
}


public abstract class BusinessBase
{
private static NHManager _mgr = null;
[ThreadStatic()]
protected static NHManager Manager
{
get
{
if( _mgr == null)
_mgr = new NHManager();
return _mgr;
}
}

private ISession _session = null;
protected ISession CurrentSession
{
get
{
if( _session == null )
{
//see if context contains it
if( HttpContext.Current[NHSESSION] == null )
//key is a constant
{

//this is the first access for this request,
//load the object

_session = Manager.OpenSession();
HttpContext.Current[NHSESSION] = _session;
}
else
{
//it exists in this request
_session = HttpContext.Current[NHSESSION]
as ISession;
}
}
//make sure it's connected
if(! _session.IsConnected)
_session.ReConnect();
return _session;
}
}
}


Is there anything glaringly wrong about the above sample? I am expecting a little flaming due to the [ThreadStatic()] in my ASP.NET Application, but is it really that bad since my manager object is WORM (Write Once Read Many) ???

I welcome suggestions and comments (now that they will actually work :P )

New template

Well I gave up on the old template because I recently was told that nobody can reply to any of my posts! I wonder what this has to do with the template that I was using, but I think that was the culprit. Maybe people actually do read this after all. :)
Wednesday, April 27, 2005

NHibernate and ASP.NET

If you haven't seen Nhibernate yet, you should really check it out. There are a lot of free ORM tools out there, but this one seems to be the most liked, as far as I've read. I am implementing it in a new project at work and so far I am liking it. A lot.

What I like best is that my Base business object can implement all of the details in Saving, Updating, and deleting objects... all I have to do is make sure and create the xml mapping file and all is taken care of for me.

I do have some design concerns though, as I don't want my front-end coupled to NHibernate at all. The UI developer shouldn't even have to know the workings of the object persistance, he/she should just call BusinessObject.Save() and let the Data Layer handle it.

So, following some advice on TSS and Code Project I decided to abstract the nitty-gritty into a static class.

Ooh, did I just say static? That must be wrong... Static classes are not very reliable in a web application, as you don't control it's lifetime at all. So I have some basic code that generates the necessary configuration, loads my persistant classes into NHibernate, and builds the session factory, and this is all static. As far as the application goes, we won't be able to tell it isn't working because the static members will just be recreated once they are lost. I'm concerned about the performance hit that we will suffer because of this.

I also want to avoid tying it to the Application bag, because that introduces a coupling between the UI and the Class library.

I'm sort of stumped at this point, and I haven't read anything yet that gives me a better alternative. Can someone recommend a solution?
Monday, April 11, 2005

img Border0 Styleborder1


interior 2 Posted by Hello

img Border0 Styleborder1


yet another Posted by Hello

img Border0 Styleborder1


here's another angle Posted by Hello

img Border0 Styleborder1


I'm selling my car... anyone interested? Posted by Hello
Credit Card Consolidation - Credit Card - Mortgage - Scottsdale Landscaping