1

为了学习 ServiceStack,我正在开发一个基于 Northwind 数据库的 API(一个 SQL Server CE sdf 文件)。我的解决方案有 3 个项目:

  • 北风数据。数据库和 POCO 类
  • Northwind.ServiceModel。DTO 类
  • 北风.ServiceInstance。服务等级

访问数据的最佳方式是什么?目前数据库位于 Northwind.Data /App_Data 文件夹中。我可以从 Web.config 访问数据库路径并在 AppHost 类中读取它以创建 IDbConnection 工厂吗?

提前致谢。

4

1 回答 1

1

访问数据的最佳方式是什么?
我不认为 OrmLite 支持 SQL Server CE,但是有这个。最好的方法可能是在您的服务中使用SqlCeConnection 。

我可以从 Web.config 访问数据库路径并在 AppHost 类中读取它以创建 IDbConnection 工厂吗?
您应该能够将连接字符串添加到 Web.config 文件。

<add name="Test" connectionString="Data Source=C:\Northwind.sdf" />  

如果我对 OrmLite 不支持 SQL CE 的看法是正确的,并且您希望 IDbConnectionFactory在服务中使用类似的语法,则可以考虑使用DBProviderFactories

我能想到的最简单(不是最好)的事情就是做下面的事情。

为 SqlCEConnection 创建一个“基本”工厂。这假设您的 Web.config 文件中有连接字符串

public class SqlCeFactory
{
    public SqlCeConnection OpenConnection()
    {
        var conn = new SqlCeConnection(ConfigurationManager.ConnectionStrings["Test"].ToString());
        try
        {
            conn.Open();
            return conn;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
}

在您的 AppHost 中注册 SqlLCeFactory

public override void Configure(Funq.Container container)
{
    container.Register<SqlCeFactory>(new SqlCeFactory());
}

将其注入您的服务中

public class SourceService : ServiceStack.ServiceInterface.Service
{
    public SqlCeFactory DbFactory { get; set; }

    public object Get(SomeRequest request)
    {
        using (var con = DbFactory.OpenConnection())
        {
            //use SqlCeConnection()
        }

        //more code
    }
}
于 2013-04-17T16:42:13.290 回答