zoukankan      html  css  js  c++  java
  • EntityFramework CodeFirst SQLServer转Oracle踩坑笔记

    接着在Oracle中使用Entity Framework 6 CodeFirst这篇博文,正在将项目从SQLServer 2012转至Oracle 11g,目前为止遇到的问题在此记录下。

    1. SQL Server中datetime类型所能表示的时间范围是1753-01-01 00:00:00.000至9999-12-31 23:59:59.998之间。在.NET中DateTime的初始值是0001-01-01 00:00:00.000000,该值超出SQL Server中datetime所能表示的范围,所以如果未在编码时指定一个合理的时间会导致数据精度丢失引起的异常。由于在项目中使用Fluent API编码指定.NET中DateTime类型映射到SQL Server中datetime2类型,该类型的范围和精度均和.NET中DateTime类型一致。所以为了统一SQL Server和Oracle需要将代码中datetime2的配置去掉。
    2. 由于Oracle和SQL Server设计结构致使Oracle的Schema不同于SQLServer。所以在初始化模型时需要指定DefaultSchema。
    3. 无法对Oracle XLOB类型使用DISTICT操作符。这点是由项目中一个字符串属性未配置长度而发现的,正常来说不应该对这种超长的字符串做DISTINCT操作的,这点来说Oracle的严谨性要高于SQLServer。
    4. 生成的sql语句中若包含如下语句
      CASE xx WHEN xx THEN ''
      这里的空字符串如果不做转换会出现ORA-12704 字符集不匹配的错误,这里需要使用EF的专家模式拦截脚本修改成如下形式,具体使用方法将在后面介绍
      CASE xx WHEN xx THEN N''
       
    5. 无法对Oracle XLOB类型使用GROUP BY操作符。
    6. 在SQL Server中可以直接在查询表达式中使用ToString,而Oracle中映射为非NCLOB类型的字段则会报类型不匹配错误。因为这里ToString会翻译成TO_NCLOB(:p__linq__0)

    原创文章,转载请注明: 转载自xdlysk的博客

    本文链接地址: EntityFramework CodeFirst SQLServer转Oracle踩坑笔记[http://www.xdlysk.com/article/56ea77333c5c0ac00fa6c0c0]

  • 相关阅读:
    跟光磊学Python开发-面向对象入门
    插件调用下推操作
    K3Wise老单获取单据行数
    git 添加和删除 global 的 remote.origin.url
    CSV转Excel格式
    java 下载文件
    windows下安装redis并设置自启动
    linxu jdk安装
    Linux安装部署Redis
    CentOS上安装MySQL(使用国内源)
  • 原文地址:https://www.cnblogs.com/xdlysk/p/5318089.html
Copyright © 2011-2022 走看看