通过fsharp探索Enterprise Library 6 DataBase 1.3 Sqlite

使用Enterprise Library就是为了尽可能少的开发常用组件。数据库在选择的过程中常会面临部署,版权,个人喜好等诸多考量。最佳的处理方法就是添加一层数据抽象层,再切换Enterprise的过程中进行无缝衔接。由于我的笔记本跑的越来越慢,又想尝试一下使用Sqlite所以,就用Sqlite做例子。

我用的是Enterprise Library 6.0原本以为只需要简单的配置就可以进行实验,没想到GitHub上Sqlite提供的Sqlite兼容组件到Enterprise Library 4.1后就不提供了。我用网上的配置文件进行实验,果然有不支持的类提示。原来总以为是没有提供正确的Database TypeProvider,试了很多次都没有结果。总是出错时最好的解决办法就是休息,然后到处看看。果然已经有高人在codeproject上试出来了。自己扩展了
类,以后再研究。先回到正题。

我在配置文件中用了Sqlite自带的测试数据库。通过发送sql语句查询数据库的代码几乎没有改动就成功的获取了希望的结果。

配置文件

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
    <section name="connectionStrings" type="System.Configuration.ConnectionStringsSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" requirePermission="true" />
  </configSections>
  <dataConfiguration defaultDatabase="sss" >
	<providerMappings>
		<add databaseType="EntLibContrib.Data.SQLite.SQLiteDatabase, EntLibContrib.Data.SQLite, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="System.Data.SQLite" />
	</providerMappings>
  </dataConfiguration>
  <system.data>
  </system.data>
  <connectionStrings>
    <add name="ExampleDatabase" connectionString="Data Source=(localdb)\v11.0;AttachDbFilename=E:\WorkHell\fsharp-practise\EnterpriseLibraryPractise\DataAccessExamples.mdf;Integrated Security=True"
      providerName="System.Data.SqlClient" />
    <add name="AsyncExampleDatabase" connectionString="Data Source=(localdb)\v11.0;Asynchronous Processing=true;AttachDbFilename=|DataDirectory|\DataAccessExamples.mdf;Integrated Security=True"
      providerName="System.Data.SqlClient" />
    <add name="DataAccessExample.Properties.Settings.DataAccessExamplesConnectionString"
      connectionString="Data Source=(localdb)\v11.0;AttachDbFilename=|DataDirectory|\DataAccessExamples.mdf;Integrated Security=True"
      providerName="System.Data.SqlClient" />
    <add name="sss"
      connectionString="Data Source=E:\WorkHell\fsharp-practise\EnterpriseLibraryPractise\dbdemos.db3;Version=3;"
      providerName="System.Data.SQLite" />
  </connectionStrings>
</configuration>

代码

#if INTERACTIVE
#I @"E:\WorkHell\fsharp-practise\packages"
#r @"EnterpriseLibrary.Data.6.0.1304.0\lib\NET45\Microsoft.Practices.EnterpriseLibrary.Data.dll"
#r @"EnterpriseLibrary.Common.6.0.1304.0\lib\NET45\Microsoft.Practices.EnterpriseLibrary.Common.dll"
#r @"System.Data.SQLite.Core.1.0.94.0\lib\net45\System.Data.SQLite.dll"
#r @"EntLibContrib.Data.SQLite.dll"
#r "System"
#r "System.Data"
#r "System.Configuration"
#endif

open System
open System.Data
open System.Data.Common
open System.Data.SqlClient
open Microsoft.Practices.EnterpriseLibrary.Data
open Microsoft.Practices.EnterpriseLibrary.Common.Configuration
open Microsoft.Practices.EnterpriseLibrary.Data.Sql
open Microsoft.Practices.EnterpriseLibrary.Data.Configuration
open System.Threading
open System.Threading.Tasks
open System.Configuration
open System.Data.SQLite
open EntLibContrib.Data.SQLite

let DisplayRowValue (reader:IDataReader) =
    while reader.Read() do
        for i = 0 to reader.FieldCount-1 do
            Console.WriteLine("{0}={1}", reader.GetName(i), reader.[i].ToString())
    Console.WriteLine()

let path = __SOURCE_DIRECTORY__ + "\FsiApp.config"
let fileMap = ConfigurationFileMap(path)
let config = ConfigurationManager.OpenMappedMachineConfiguration(fileMap)
let factory = new DatabaseProviderFactory(fun s -> config.GetSection(s))

let defaultDB = factory.Create("sss")
let reader = defaultDB.ExecuteReader(CommandType.Text, "select * from orders")
DisplayRowValue reader

以上

时间: 2024-11-10 08:06:22

通过fsharp探索Enterprise Library 6 DataBase 1.3 Sqlite的相关文章

通过fsharp探索Enterprise Library DataBase 1.2

上一次讲到Enterprise Library中Data Access 模块的配置以及简单SQL语句和存储过程的执行.在探索的过程中应用Fsharp语言和交互环境能够马上看到结果,这感觉真的是非常通透. 1.提高数据库操作的复杂性,加入参数的变化,这一点和ADO的操作没有太多的不同. SQL语句带参数 let sqlStatement = "select top 1 * from OrderList where State like @state" using(defaultDB.Ge

通过Fsharp探索Enterprise Library Exception

Exception怎么生成是一回事,怎么展示又是还有一回事了. Exception Block主要关注的点在于Exception信息的展示.Exception不同于一般的log信息,是系统设计者未考虑的错误情况.当异常出现时,错误的情况,或者暴露一些比較敏感的系统信息.或者将一些不怎么友好的信息显示给一些不怎么友好的客户.这时一个计算机异常就引入了一个客户异常,一个终极异常.所以异常处理的目标就是截断异常,进而恢复系统. 把合理的异常信息显示给相相应的用户. 因此主要的异常处理脉络也出现了.1.

通过fsharp 使用Enterprise Library Unity 3 - 三种拦截模式的探索

这篇就三种拦截模式进行一下探索. 特性总结   类型 特点 其它 InterfaceInterceptor Innstance 仅单接口 类内部函数互相引用无法引起拦截行为 TransparentProxyInterceptor           Instance 多接口(接口之间能够切换)  MarshalByRef 执行缓慢 接口类型(virtual, non-virtual, or interface) 类内部函数互相引用能够引起拦截行为 VirtualMethodInterceptor

通过fsharp 使用Enterprise Library Unity

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">使用Ioc概念的Unity库的优点,简单的说就是进一步解耦系统各组件的依赖关系.客户端代码只需依赖需要使用的接口(服务)就可以快速的进行开发.</span> 1.基本流程,定义类-->配置container-->解析类,并使用-->析构(依策略) 2.注册的

通过fsharp 使用Enterprise Library Unity 4 - Policy Interjection

policy interception Interception class拦截器还可以用Policy 以一种更高效的方式进行加载使用.拦截和被拦截对象的关系常见的是一对多,因为被拦截的主要是对象的方法所以有时数量巨大.Policy具有定义匹配模式的功能,所以可以简化这一匹配工作,不用一一添加被拦截对象.匹配的模式有 ? Assembly name ? Namespace ? Type ? Tag attribute ? Custom attribute ? Member name ? Meth

通过fsharp 使用Enterprise Library Unity 2

接着Depandency Injection继续. 最想做的还是用现成的程序模块对程序进行行为注入.只是不急,在此之前自己写一个接口对象观察一下IInterceptionBehavior接口的功效. type LogingInterceptionBehavior() = let WriteLog message = printfn "From the logging interceptor: %A" message interface IInterceptionBehavior wit

基于Enterprise Library的Winform开发框架实现支持国产达梦数据库的扩展操作

由于一个客户朋友的需求,需要我的Winform开发框架支持国产达梦数据库的操作,这个数据库很早就听过,但是真正一般项目用的很少,一般在一些特殊的项目可能需要用到.由于我的Winform开发框架,是基于Enterprise Library的数据访问层的实现,因此增加一个数据库的支持很容易,本文介绍如何在框架层面上支持这种神秘的国产数据库-达梦数据库. 1.达梦数据库的简单介绍 达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM.达梦数据库管理系统的最新版本是7.

在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持

在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle.SQLServer.Mysql这些常规的数据库,也有可能访问SQLite.Access,或者一些我们可能不常用的PostgreSQL.IBM DB2.或者国产达梦数据库等等,这些数据库的共同特点是关系型数据库,基本上开发的模型都差不多,不过如果我们基于ADO.NET的基础上进行开发的话,那么各种数据库都有自己不同的数据库操作对象,微软企业库Enterprise Library是基于这些不同数据库的操作做的抽象模型,适合多数据

转:Enterprise Library 4.0缓存应用程序块

英文原文:http://msdn.microsoft.com/zh-cn/library/cc511588(en-us).aspx Enterprise Library 缓存应用程序块允许开发人员在应用程序中合并一个局部缓存,它支持内存内的缓存,和可选的可以是数据库存储或独立存储的后端存储.应用程序块可以不做修改 的使用,它提供所有必须的获取.添加和移除缓存数据的功能.可配置的到期和清除策略也是应用程序块的一部分. 在构建企业范围发布的应用程序时,架构和开发人员都要面对许多挑战,缓存可以帮助他们