Where should i place var dbFactory = new OrmLiteConnectionFactory

I am new to both asp.net mvc and ormlite. Where should I place the code to create dbFactory? I am not using a container.

What I am doing now works but does not close connections correctly.

If you don’t want to use a container than you should use a static property to ensure you’re using a singleton instance, a popular approach is to have a static property on your MvcApplication class, e.g:

public class MvcApplication : System.Web.HttpApplication
{
    public static IDbConnectionFactory DbFactory;

    protected void Application_Start()
    {
        DbFactory = new OrmLiteConnectionFactory(
            ConfigurationManager.AppSettings["connectionString"],
            SqlServerDialect.Provider);
    }
}

Then to make using OrmLite easier I’d use a Base Controller class that has an IDbConnection property

public abstract class ControllerBase : Controller
{
    private IDbConnection db;
    public IDbConnection Db => db ?? (db = MvcApplication.DbFactory.OpenDbConnection());

    protected override void Dispose(bool disposing)
    {
        base.Dispose(disposing);
        db?.Close();
    }
}

Which you can use directly in your Controller classes, e.g:

public class MyController : ControllerBase
{
    public ActionResult Index()
    {
        var results = Db.Select<Table>();
    }
}

I get an error "Cannot implicitly convert type ‘ServiceStack.OrmLite.OrmLiteConnectionFactory’ to ‘System.Data.Entity.Infrastructure.IDbConnectionFactory’.
If I change DbFactory to type OrmLiteConnectionFactory then the error goes away.

When I try to do the ControllerBase class I get lots of red wigglers.

"Db => db ?? (db ="  all with red wigglers + "DbFactory" + "db?.Close"

I appreciate the help greatly.

You need to change it to use the right ServiceStack.Data.IDbConnectionFactory.

Thanks. That fixed the problem creating DbFactory. Still have the red wigglers in ControllerBase.

Intellisense wants a ; where the lambda operator is. I suspect I may be missing a using but don’t know which one.

That uses valid C# 6 syntax, if you want C# 5 syntax change it to:

private IDbConnection db;
public IDbConnection Db
{
    get { return db ?? (db = MvcApplication.DbFactory.OpenDbConnection()); }
}

Some of us are still in the Dark Ages! Red wigglers are gone. Thank you very much.

1 Like