使用EF(EntityFramework)的bool布尔变量操作Oracle数据库
Oracle数据库本身没有bool类型,但是C#编程中使用bool值很方便做运算。Oracle最新的Oracle.ManagedDataAccess是支持C#中的bool的,不需要安装Oracle客户端的自适应32位及64位,在也不用为安装32位或64位的Oracle烦恼了。
Oracle的EF(EntityFramework)开发,不需要安装Oracle客户端,不需要安装Oracle Developer Tools for Visual Studio,因为我们使用的是CodeFrist,除非你想使用可视化的操作页面可以考虑安装。其实我也不完全使用CodeFirst,特别反感需要把字段的长度都固定在C#代码里。我也不使用数据库迁移,我喜欢使用powerdesigner设计数据库,可清晰的看到各表的依赖关系,方便交流,可自动生成Oracle数据库的SQL脚本,手工运行SQL语句,生产环境中也好部署,特别是后期的更新,感觉使用数据库迁移心里不踏实,一不小心把数据库Drop了可咋办。
Oracle的表采用number(1)的类型,1:true,0:false。
关键步骤
install-package Oracle.ManagedDataAccess
install-package Oracle.ManagedDataAccess.EntityFramework
特别是配置文件
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>
<connectionStrings>
<add name="DefaultConnection" providerName="Oracle.ManagedDataAccess.Client" connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.168.1.188)(PORT=6521))(CONNECT_DATA=(SERVICE_NAME=hkqghkbg)));User ID=dacong;Password=Pass1word;" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="Oracle.ManagedDataAccess.EntityFramework.OracleConnectionFactory, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<providers>
<provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="Oracle.ManagedDataAccess.Client" />
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>
</system.data>
<oracle.manageddataaccess.client>
<version number="*">
<edmMappings>
<edmMapping dataType="number">
<add name="bool" precision="1" />
<add name="byte" precision="3" />
<add name="int16" precision="5" />
<add name="int32" precision="10" />
<add name="int64" precision="19" />
</edmMapping>
</edmMappings>
</version>
</oracle.manageddataaccess.client>
C# 的Dapper组件也可以使用bool操作Oracle数据库,表的字段采用number(1),0:false,>=1:true