带有自定义 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>();
}
}
我最近将 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>();
}
}