gpt4 book ai didi

design-patterns - ServiceStack + ORMLite + 存储库模式

转载 作者:行者123 更新时间:2023-12-04 10:53:41 25 4
gpt4 key购买 nike

我正在尝试使用 ORMLite 实现存储库模式。我最初开始于:

public List<Todo> GetByIds(long[] ids)
{
using (IDbConnection dbConn = dbFactory.OpenDbConnection())
{
return dbConn.Ids<Todo>(ids).ToList();
}
}

但是在我的存储库中的每个方法下都有这个似乎有点重复?所以我创建了一个数据上下文类,我的所有存储库都继承自:
public class TodoRepository : DataContext

这是 DataContext类(class):
public class DataContext
{
protected OrmLiteConnectionFactory dbFactory = new
OrmLiteConnectionFactory(ConfigurationManager.ConnectionStrings["AppDb"].
ConnectionString, SqlServerOrmLiteDialectProvider.Instance);

protected IDbConnection dbConn;

public DataContext()
{
dbConn = dbFactory.OpenDbConnection();
}
}

然后我只需要在我的方法中做到这一点:
public List<Todo> GetByIds(long[] ids)
{
return dbConn.Ids<Todo>(ids).ToList();
}

我只是很好奇这是否是一个好的设计模式,以及其他人在使用存储库模式通过 ORMLite 进行数据访问时提出了什么。

最佳答案

我不会对存储库中的连接的强类型 DialectProvider 和配置进行硬编码。相反,我会做一些类似于 ServiceStack 的基础 Service类,例如:

public class Repository : IDisposable {

public IDbConnectionFactory DbFactory { get; set; } //injected by IOC

IDbConnection db;
IDbConnection Db
{
get
{
return db ?? db = DbFactory.Open();
}
}

public List<Todo> GetByIds(long[] ids)
{
return Db.Ids<Todo>(ids);
}

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

这样你就可以初始化 IDbConnectionFactory它应该在哪里,即在您的主机项目的 IOC 注册中。在 ServiceStack 中,这是在 AppHost.Configure() 中:
container.Register<IDbConnectionFactory>(c => 
OrmLiteConnectionFactory(ConfigurationManager.ConnectionStrings["AppDb"].
ConnectionString, SqlServerDialect.Provider);

container.RegisterAutoWired<Repository>().ReusedWithin(ReuseScope.None);

关于design-patterns - ServiceStack + ORMLite + 存储库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14480237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com