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. ubuntu 下安装scrapy

    1.把Scrapy签名的GPG密钥添加到APT的钥匙环中: sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 6272 ...

  2. 总结30个CSS3选择器

    或许大家平时总是在用的选择器都是:#id  .class  以及标签选择器.可是这些还远远不够,为了在开发中更加得心应手,本文总结了30个CSS3选择器,希望对大家有所帮助. 1 *:通用选择器 ;; ...

  3. 仿陌陌的ios客户端+服务端源码项目

    软件功能:模仿陌陌客户端,功能很相似,注册.登陆.上传照片.浏览照片.浏览查找附近会员.关注.取消关注.聊天.语音和文字聊天,还有拼车和搭车的功能,支持微博分享和查找好友. 后台是php+mysql, ...

  4. CYQ.Data V5 从入门到放弃ORM系列:教程 - MAction类使用

    背景: 随着V5框架使用者的快速增加,终于促使我开始对整个框架编写完整的Demo. 上周大概花了一星期的时间,每天写到夜里3点半,终完成了框架所有功能的Demo. 同时,按V5框架名称空间的顺序,对每 ...

  5. Cocos2d-x不要随便在onEnter里面addChild

    使用任何版本的Cocos2d-x(1.x,2.x,3.0),在onEnter中调用addChild,都要小心谨慎,因为它有可能导致两种莫名其妙的BUG,莫名其妙的BUG当然难以定位了!更何况这个BUG ...

  6. ASP.NET MVC 5 Web编程3 -- Controller的应用及扩展

    Controller基础 一. 访问修饰符 1.1 类的访问修饰符 Controller类的访问修饰符必须是public,url才能被拦截. internal能编译通过,但无法拦截url请求.priv ...

  7. 疯狂的JSONP

    何为跨域?何为JSONP?JSONP技术能实现什么?是否有必要使用JSONP技术? 跨域 就是由于JavaScript同源策略的限制,使得a.com域名下的js无法操作b.com或c.a.com域名下 ...

  8. ABP源码分析十九:Auditing

    审计跟踪(也叫审计日志)是与安全相关的按照时间顺序的记录,它们提供了活动序列的文档证据,这些活动序列可以在任何时间影响一个特定的操作. AuditInfo:定义如下图中需要被Audit的信息. Aud ...

  9. php下载文件

    $size=filesize($file);$file=fopen($file, "r");ob_start();header("Content-type: applic ...

  10. Enterprise Solution 企业资源计划管理软件 C/S架构,支持64位系统,企业全面应用集成,制造业信息化

    Enterprise Solution是一套完整的企业资源计划系统,功能符合众多制造业客户要求.系统以.NET Framework技术作为开发架构,完善的功能可有效地帮助企业进行运营策划,减低成本,如 ...