1、Oracel数据库没有字段自增长属性,要实现自增长通常是通过查询序列或者触发器来实现的。

设置自增长主键

alter table  SUB_SUBSCRIPTION add primary key(ID);
alter table SUB_SUBSCRIPTION modify column ID int(11) NOT NULL AUTO_INCREMENT;

2、MySQL如何获取行号

MySQL中没有直接获取行号的函数,但是可以自己创建一个函数。

-- 创建行号函数
CREATE FUNCTION func_rowNumber() RETURNS int
NO SQL
NOT DETERMINISTIC
begin
SET @var := @var + 1;
return @var;
end;

3、Mysql中的视图不支持子查询,可以通过创建中间视图的方式实现。

-- 中间视图
create view vm_log_syn_temp(`TABLE_NAME`,`KEY_INFO`,`LOG_ID`,`CODE`,`NAME`,`ERROR_KEYS`,`ERROR_TYPE`,`ERROR_INFO`,`LOG_DATE`) as
-- 会员同步
SELECT 'MBR_MEMBERS_TEMP' AS table_name,
'会员号:' || mbr.MEMBER_ID AS key_info,
m1.ID AS log_id,
m1.job_name AS code,
m1.job_description AS NAME,
m1.foreign_key AS error_keys,
m1.error AS ERROR_TYPE,
m1.description || ':' || m1.foreign_key AS error_info,
m1.error_date AS log_date
FROM mbr_members_temp mbr
LEFT OUTER JOIN log_syn m1
ON CAST(mbr.MEMBER_ID AS CHAR)= m1.temp_key
WHERE mbr.syncs = -1; --
create view vm_log_syn(ID,`TABLE_NAME`,`KEY_INFO`,`LOG_ID`,`CODE`,`NAME`,`ERROR_KEYS`,`ERROR_TYPE`,`ERROR_INFO`,`LOG_DATE`) as
SELECT func_rowNumber() AS ID,`TABLE_NAME`,`KEY_INFO`,`LOG_ID`,`CODE`,`NAME`,`ERROR_KEYS`,`ERROR_TYPE`,`ERROR_INFO`,`LOG_DATE` from vm_log_syn_temp;

4、Orace字段名称可以用“包起来,而在Mysql中用的是`

5、日期格式不一样

Oracel:TO_DATE('2014-02-17 11:44:21', 'YYYY-MM-DD HH24:MI:SS')

MySQL:str_to_date('2013-12-24 16:26:20', '%Y-%m-%d %H:%i:%s')

6、C#读取MySql时,如果存在字段类型为date/datetime时的可能会出现以下问题“Unable to convert MySQL date/time value to System.DateTime”

原因:可能是该字段(date/datetime)的值默认缺省值为:0000-00-00/0000-00-00 00:00:00,这样的数据读出来转换成System.DateTime时就会有问题;
解决办法:
1、将该字段的缺省值设置为null,而不是0000-00-00/0000-00-00
00:00:00的情况;
2、在链接MySQL的字符串中添加:Convert Zero Datetime=True 和 Allow Zero
Datetime=True两个属性;
3、将该字段设置成字符串类型;

我是直接在nhibernate中添加Convert Zero Datetime=True  解决问题。

<property name="connection.connection_string">server = 192.168.2.155; database = eshop; uid = root; pwd = root;charset=utf8;Convert Zero Datetime=True;</property>

7、nhibernate中oracle连接的时候,这里是服务名

oracle配置文件名称:tnsnames.ora

nhibernate中oracle连接的时候,这里是服务名,而不是IP地址

tnsnames.ora所在路径E:\app\Zouqj\product\11.2.0\dbhome_1\NETWORK\ADMIN

8、Web站点在本地运行没问题,发布到IIS上面提示“未能加载文件或程序集”

原因:操作系统是64位的,但发布的程序引用了一些32位的ddl,所以出现了兼容性的问题
解决方案一:如果是64位机器,IIS——应用程序池——高级设置——启用32位应用程序 :true。
解决方案二:修改项目属性——生成——目标平台(比如,X86\X64

9、Oracle中的number类型转到Mysql中变成了decimal类型,有一些本来应该是int类型的。

10、命名空间引用变化

旧:using FluentNHibernate.Mapping;

新:

using NHibernate.Mapping.ByCode;
using NHibernate.Mapping.ByCode.Conformist;

11、数据映射变化

子类映射(注释部分是旧的方式)

public class IntegralCartItem:CartItem

    public class CartItemMap : ClassMapping<CartItem>
{
public CartItemMap()
{
Table("CART_GOODS_ITEM");
//Id(p => p.ID, m => m.Column("CART_ITEM_ID").GeneratedBy.Assigned();
Id(p => p.ID, m => { m.Generator(Generators.Identity); m.Column("CART_ITEM_ID"); }); Property(p => p.CartId, m => { m.Column("CART_ID"); });
Property(p => p.ClubID, m => m.Column("CLUB_ID"));
Property(p => p.ProductName, m => m.Column("PRODUCT_NAME"));
Property(p => p.ProductType, m => m.Column("PRODUCT_TYPE"));
Property(p => p.Quantity);
Property(p => p.OriginalPrice, m => m.Column("ORIGINAL_PRICE"));
Property(p => p.SilverPrice, m => m.Column("SILVER_PRICE"));
Property(p => p.PlatinaPrice, m => m.Column("PLATINA_PRICE"));
Property(p => p.GoldPrice, m => m.Column("GOLD_PRICE"));
Property(p => p.CreateDate, m => m.Column("CREATE_DATE"));
Property(p => p.ProductGroup, m => m.Column("PRODUCT_GROUP"));
Property(p => p.GiftItemId, m => m.Column("GIFT_ITEM_ID"));
Property(p => p.ProductCode, m => m.Column("PRODUCT_CODE"));
Property(p => p.MemberId, m => m.Column("MEMBER_ID"));
Property(p => p.IP);
Property(p => p.Integral);
Property(p => p.IntegralToMoney, m => m.Column("INTEGRAL_TO_MONEY"));
//DiscriminateSubClassesOnColumn("SALE_TYPE", 0); //del by zouqj
Discriminator(p => p.Column("SALE_TYPE"));
DiscriminatorValue();
}
} public class IntegralCartItemMap : SubclassMapping<IntegralCartItem>
{
public IntegralCartItemMap()
{
DiscriminatorValue(-);
}
}

新:

     private ISessionFactory CreateSessionFactory(string sessionFactoryConfigPath, ISessionFactory sessionFactory)
{
// 如果没有匹配的 SessionFactory 则创建一个新的
if (sessionFactory == null)
{
Check.Require(!File.Exists(sessionFactoryConfigPath),
"The config file at '" + sessionFactoryConfigPath + "' could not be found"); NHibernate.Cfg.Environment.UseReflectionOptimizer = false;
Configuration cfg = new Configuration();
cfg.Configure(sessionFactoryConfigPath); var data = "EStore.Data";// System.Configuration.ConfigurationManager.AppSettings["Data"];
if (!string.IsNullOrEmpty(data))
{
ModelMapper mapper = new ModelMapper(new MyInspector());
foreach (var assembly in data.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries))
{
MapModel(assembly, mapper);
}
var hbmMapping = mapper.CompileMappingForAllExplicitlyAddedEntities();
cfg.AddMapping(hbmMapping);
} sessionFactory = cfg.BuildSessionFactory(); if (sessionFactory == null)
{
throw new InvalidOperationException("cfg.BuildSessionFactory() returned null.");
} sessionFactories[sessionFactoryConfigPath] = sessionFactory;
} return sessionFactory;
}
/// <summary>
    class MyInspector : ExplicitlyDeclaredModel
{
public override bool IsEntity(Type type)
{
//if (type == typeof(TemporarySetCartItem))
if(type.Name.Contains("TemporarySetCartItem"))
return false;
return base.IsEntity(type);
}
}

旧:

        private ISessionFactory CreateSessionFactory(string sessionFactoryConfigPath, ISessionFactory sessionFactory)
{
Check.Require(File.Exists(sessionFactoryConfigPath),
"The config file at '" + sessionFactoryConfigPath + "' could not be found"); LogManager.Logger.Info("Create ISessionFactory" + sessionFactoryConfigPath); Configuration cfg = new Configuration();
cfg.Configure(sessionFactoryConfigPath); #region MyRegion
string fluentAssembly = "";// Analyze(cfg);
// 创建一个新的 SessionFactory,如果fluentAssembly为空,值使用传统方式创建SessionFactory,否则用Fluently创建
if (string.IsNullOrEmpty(fluentAssembly))
{
sessionFactory = cfg.BuildSessionFactory();
}
else
{
sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString("northwind"))//这是一个无效的值。主要为适应Fluently必需设置此处,通过ExposeConfiguration来覆盖他
.Mappings(p => p.FluentMappings.AddFromAssembly(Assembly.Load("EStore.Data")))
.ExposeConfiguration(p =>
{
//覆盖和扩展Fluently的配置信息
foreach (string key in cfg.Properties.Keys)
p.Properties[key] = cfg.Properties[key];
})
.BuildSessionFactory();
}
#endregion if (sessionFactory == null)
{
throw new InvalidOperationException("cfg.BuildSessionFactory() returned null.");
}
return sessionFactory;
}

12、No row with the given identifier exists[X]

数据问题,两张表之间进行了映射,X表中没有对应的记录,删除无用记录即可。

Web项目从Oracle转为Mysql,fluentnhibernate-1.0和NHibernate2.1.0升级到NHibernate3.3的注意事项的更多相关文章

  1. Web项目--------原Oracle数据库的项目同时兼容MySql

    原Oracle数据库的项目同时兼容MySql步骤: (一)修改资源配置文件applicationContext-dataSource.xml的数据库连接 Oracle数据库中加上from dual的原 ...

  2. Web项目使用Oracle.DataAccess.dll 类库连接oracle数据库

    首先我用的工具是oracle 32位免安装版+Oracle.DataAccess.dll 32位  文件版本4.121.1.0+vs2013 +win7 64位 Oracle.DataAccess.d ...

  3. [转]在64位的环境中使用VS建立Web项目进行Oracle连接需要注意WebDev是32位的

    本文转自:http://www.cnblogs.com/studyzy/archive/2010/10/28/1863056.html 我们平时使用的都是32位的机器进行开发,装的都是32位的软件,但 ...

  4. ruby新建web项目步骤,使用mysql数据库

    1.创建一个项目 指定数据库 rails new demo02 -d mysql 2.修改 config/database.yml 修改数据库密码 default: &default adap ...

  5. JAVA项目将 Oracle 转 MySQL 数据库转换(Hibernate 持久层)

    项目开发时用的是Oracle数据库,但为了更好的做分布式,做集群,我们要将数据库转成 MySQL! 在数据库迁移中首先要做的事是将 Oracle 的表结构以及数据 克隆到 MySQL 数据库. 这点不 ...

  6. web 项目:解决插入 MySQL 数据库时中文乱码问题

    背景:在做 javaweb 项目的时,前台传递的中文最后插入数据库的时候总是出现乱码现象. 解决方案 ​ A.不管是使用 Idea.eclipse,确定自己的项目所使用的字符集是 UTF-8. ​ B ...

  7. A5/web项目连接Oracle 12c数据库报:ORA-01017: 用户名/口令无效

    解决办法: 修改Oracle12c用户名密码,再改回来,就ok了,亲测有效.

  8. 使用 IDEA 创建 Maven Web 项目 (异常)- Disconnected from the target VM, address: '127.0.0.1:59770', transport: 'socket'

    运行环境: JDK 版本:1.8 Maven 版本:apache-maven-3.3.3 IDEA 版本:14 maven-jetty-plugin 配置: <plugin> <gr ...

  9. 解决eclipse中运行web项目时弹出的"Port 8080 required by Tomcat 9.0 Server at localhost is already in use...

    1.tomcat默认端口是8080,可以修改通过tomcat的端口 修改tomcat\conf\server.xml     结果运行程序,还是报"Port 8080 required by ...

随机推荐

  1. H5 canvas的 width、height 与style中宽高的区别

    Canvas 的width height属性 1.当使用width height属性时,显示正常不会被拉伸:如下 <canvas id="mycanvas" width=&q ...

  2. Mysql - 查询之关联查询

    查询这块是重中之重, 关系到系统反应时间. 项目做到后期, 都是要做性能测试和性能优化的, 优化的时候, 数据库这块是一个大头. sql格式: select 列名/* from 表名 where 条件 ...

  3. 深入理解Spring MVC

    如何让一个普通类成为Controller? 方案一:实现接口Controller 解析:handleRequest(request,response) 方案二:继承AbstractController ...

  4. web前端开发分享-目录

    1. web前端开发分享-css,js入门篇 2. web前端开发分享-css,js进阶篇 3. web前端开发分享-css,js提高篇 4. web前端开发分享-css,js工具篇 5. web前端 ...

  5. 需要UWP Vendor一名

    工作地点北京,海淀,微软大厦2号楼,小冰项目组.

  6. 纯JS打造比QQ空间更强大的图片浏览器-支持拖拽、缩放、过滤、缩略图等

    在线演示地址(打开网页后,点击商家图册): http://www.sport7.cn/cc/jiangnan/football5.html 先看一看效果图: 该图片浏览器实现的功能如下: 1. 鼠标滚 ...

  7. [DeviceOne开发]-do_LinearLayout组件使用技巧

    一.摘要 今天跟大家主要来介绍一下DeviceOne中的do_linearlayout这个布局,在DeviceOne开发中,do_linearlayout这个布局是相当重要. 现在给大家来总结一下. ...

  8. 【完全开源】知乎日报UWP版:项目结构说明、关键源代码解释

    目录 说明 项目结构 关键代码 演示视频 说明 上一篇博客将源码放出来了,但是并没有做过多的介绍,所以如果自己硬看可能需要花费很长的时间,尤其这些代码并不是自己写的.项目不算复杂但是也不算简单,这篇文 ...

  9. 如何在 Visual Studio 中使用 Git 同步代码到 CodePlex

    开源社区不管在国内还是国外都很火热,微软也曾因为没有开源而倍受指责,但是随着 .Net framework.ASP.Net MVC等框架的逐渐开源,也让大家看到了微软开源的步伐.CodePlex 则是 ...

  10. 遍历dynamic的方式

    一.遍历ExpandoObject /// <summary> /// 遍历ExpandoObject /// </summary> [TestMethod] public v ...