netly mysql 集成环境_[ASP.net教程]Web项目从Oracle转为Mysql,fluentnhibernate

[ASP.net教程]Web项目从Oracle转为Mysql,fluentnhibernate

0 2016-05-20 11:00:17

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`) asSELECT 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  解决问题。

server = 192.168.2.155; database = eshop; uid = root; pwd = root;charset=utf8;Convert Zero Datetime=True;

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

oracle配置文件名称:tnsnames.ora

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

bc91bb04e6e9c61e24c974e4440db8f2.gif

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

bc91bb04e6e9c61e24c974e4440db8f2.gif

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、数据映射变化

bc91bb04e6e9c61e24c974e4440db8f2.gif

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

public class IntegralCartItem:CartItempublic class CartItemMap : ClassMapping { 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(0); } } public class IntegralCartItemMap : SubclassMapping { public IntegralCartItemMap() { DiscriminatorValue(-10); } }

新: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; } ///

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 = "1";// 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; }

本文网址:http://www.shaoqun.com/a/223613.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

MYSQL

0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值