Attention: We are retiring the ASP.NET Community Blogs. Learn more >

Contents tagged with .NET 3.5

  • So I Created Another Utils Library

    Thought it was time I start my own Utils library (why not everyone else seems to have one), I have things like a UnitOfWork implementation, base Repository class, and plan to add more things as I go.

    This is still a work in progress and I would appreciate any feedback out there, in the meantime I will continue my work on it.

    You can find the project on GitHub @ http://github.com/stefansedich/YetAnotherUtilsLib


    Cheers
    Stefan

  • In Memory SQLite + Unit Test + FluentNHibernate

    UPDATE:

    I have forked fluent NH here: http://github.com/stefansedich/fluent-nhibernate, and added a change so we can just use:

    .Database(SQLiteConfiguration.Standard.InMemory().ShowSql())

    By default the InMemory() helper will now add the pooling support, I sent a push request, so hopefully this hits trunk. Not sure if I was being silly but I do not see a need where you would not pool in memory SQLite anyway.

    ----------------------------------------------------------

    Just playing around with FNH for the first time, getting my unit tests running proved to be a pain, did a Google and had no luck finding a solution to my problem.

    A quick play using the fluent config I found a way to get it working, my full session factory setup is below:

    public ISessionFactory GetSessionFactory() { return Fluently.Configure() .Database(SQLiteConfiguration.Standard.InMemory() .ConnectionString("Data Source=:memory:;Version=3;New=True;Pooling=True;Max Pool Size=1;")) .Mappings(m => m.FluentMappings.AddFromAssembly(typeof(CustomerRepository).Assembly)) .ExposeConfiguration(config => new SchemaExport(config).Create(true, true)) .BuildSessionFactory(); }

    The key was to set the Pooling=True;Max PoolSize=1; in my config, looking at fluent NH the .InMemory() shortcut seems to not set these:

    public SQLiteConfiguration InMemory() { Raw("connection.release_mode", "on_close"); return ConnectionString(c => c .Is("Data Source=:memory:;Version=3;New=True;")); }

    Guess it would be great if it did, but for the time being I will just do it manually.


    Cheers
    Stefan

  • NHibernate Session Management using FluentNhibernate and Castle Windsor

    Time for my first post in a while, thought I would post on session management using Castle Windsor.

    I found this good post, http://blog.stevehorn.cc/2009/03/fluent-nhibernate-configured-via.html and I have basically converted it to use Castle for IoC instead.

    The Windsor config that will work is below:

    var container = new WindsorContainer();
    container.AddFacility(); // This adds support to be able to use the UsingFactoryMethod.

    container.Register(Component.For().ImplementedBy().LifeStyle.Singleton);
    container.Register(Component.For().UsingFactoryMethod(x => x.Resolve() .GetSessionFactory() .OpenSession()).LifeStyle.PerWebRequest);

    The only other addition that is needed for Windsor is to add the PerWebRequest module to your Web.config file in the httpModules section:

    <add name="PerRequestLifestyle" type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.MicroKernel" />

    And you are done, nice and simple NHibernate Session management using a Windsor container.



    Cheers Stefan

  • Lazy Loaded One-To-One With NHibernate

    UPDATE 20081114

    The one-to-one solution I had posted turned out not to work for updates, :(, in the end I had to use a many-to-one map with a unique foreign key association to get this to work, the updated example is below. Sorry for my EPIC FAIL :)...

  • Avoid Memory Leaks When Using Windsor And Not Releasing Objects

    I just had this issue in a project I am working on (ASP.NET Webforms Application), yesterday I ran a load test and watched my memory climb rapidly and max out not long after. I am using Castle Windsor for my IOC and mostly transient instances are registered so I did not expect any issues here as I asssumed there would be no references held to my transient instances but the leak shows this is happening.

    I am not releasing my services once done so this is partly my fault but I do not wan't to explicitly release them so I found another way which means setting the ReleasePolicy on the kernel to use the NoTrackingReleasePolicy. The default release policy is the AllComponentsReleasePolicy which from what I can see by debugging will keep track of your instances and you will need to release them manually when you are finished with the item.

  • Extension Method Competition

    I plan on holding an extension method competition, basically the idea is that you submit your favourite most useful/elegant/sexy extension method and these will be judged by a selection of judges (to be picked) and there will also be some form of reward for the winner.