【问题标题】:Get SQL Server CE path form multiple projects从多个项目中获取 SQL Server CE 路径
【发布时间】:2013-04-17 12:53:21
【问题描述】:

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

  • Northwind.Data。 数据库和 POCO 类
  • Northwind.ServiceModel。 DTO 类
  • Northwind.ServiceInstance。 服务类

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

提前致谢。

【问题讨论】:

    标签: c# web-config sql-server-ce servicestack ormlite-servicestack


    【解决方案1】:

    访问数据的最佳方式是什么?
    我认为 OrmLite 不支持 SQL Server CE,但有 this。最好的方法可能是在您的服务中使用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
        }
    }
    

    【讨论】:

    • 删除这个:catch (Exception ex) throw ex; 这将丢弃堆栈跟踪。见Exceptions Best Practices
    • 感谢您的回复。 @paaschpa 目前我的 sdf 文件位于 Northwind.Data/App_Data 文件夹中(在 Northwind.Data 项目中)。我想做的是从 Northwind.ServiceInstance 项目(AppHost.Configure 方法)访问(web.config 中的 ConnectionString)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多