带有自定义 ORM 框架的 Owin(不是 Entity Framework)

Owin with custom ORM framework (not Entity Framework)

我最近将 Entity framework 与 Identity 和 OWIN 一起使用,但我不想再使用 Entity,而是使用 ServiceStack 中的 OrmLite。

我现在面临的问题是我不太明白如何从 Owin 启动中替换这部分 class:

`app.CreatePerOwinContext(AppDbContext.Create);
 app.CreatePerOwinContext<AppUserManager>(AppUserManager.Create);

使用 OrmLite。我应该怎么做?

只需创建一个 returns OrmLiteFactory 的方法?虽然 OrmLiteFactory 没有实现 IDisposable 并且不会工作

OrmLiteConnectionFactory 应该注册为单例。然后您可以使用它来创建 ADO.NET IDbConnection 和:

using (var db = dbFactory.OpenDbConnection())
{
    //
}

一旦注册为单例,您就可以使用类似于 RepositoryBase class 中的惰性 属性 模式来简化数据访问,例如:

public abstract class RepositoryBase : IDisposable, IRepository
{
    public virtual IDbConnectionFactory DbFactory { get; set; }

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

    public virtual void Dispose()
    {
        if (db != null)
            db.Dispose();
    }
}

这将允许像正常连接一样访问 Db 连接,因为它是 IDisposable 应该在请求执行后处理它,例如:

public class MyController : RepositoryBase
{
    public List<Poco> GetPocos()
    {
        return Db.Select<Poco>();
    }
}