发布自己改的版本NBear95(2009年5月自己更新)

从2008年年初开始用 Nbear 3.7.2 ,之所以选择它,主要是因为,它是开源的,可修改, 呵. 我并没有入选 Nbear 开发组, 自己改,自己用而已.  用了三个项目, 一个 Oracle , 两个 Sqlserver (2000,2008).

今天和原始版本做了一下比对. 整理了主要修改的地方,为方便说明问题,我的版本用 V95说明(受 Ubuntu 的影响, 喜欢用时间记录版本,和大小没关系,比较鄙视一个产品上来来说是6.0 , 7.0 之类的。如果那样的话,可以认为我的是 95.0 版), 原始版本用 V37 说明。

1. V95:Attach 方法可附加到多个实体, 在更新的时候, 会更新多个实体。 即. Attach 后 Save , 会影响多行记录.如:

ExtAnnex exan = new ExtAnnex();
exan.AnnexID 
= 10;
exan.Attach();
exan.AnnexID 
= 12 ;
exan.Edittime 
= DateTime.Now ;

db._.Save( exan ) ;

/*生成SQL(第一个写全, 以后就用简写了,省去表名和限定符。):
update "ExtAnnex"
set "ExtAnnex"."AnnexID" = '12'  , 
"ExtAnnex"."EditName" = '2009-5-17 12:22:00'
where "ExtAnnex"."AnnexID" = '10' ;
*/

2. V95:Oracle 支持自增ID,与 SQL Server 兼容用法。 Oracle 中需要建立相应的序列。 Save 返回新的值。

3.V95 ,添加了完整的从 .Net 类型到 数据库类型的映射 。 参见: PropertyConfiguration.NBear.Common.TheFullTypeList 。 在V37 里Oracle的映射比较乱。可参见原写法: NBear.Common.PropertyConfiguration.GetDefaultSqlType(System.Type)

4.V95为了在生成SQL 的时候特殊处理 Oracle , 增加了 NBear.Common.Util.DatabaseType 。

5. V95条件表达式增加对枚举的支持。

db.Find<Dict>(
Dict._.PID 
== DictRootKeyEnum.Word && Dict._.Key == DictWordKeyEnum.Home
)
/*  DictRootKeyEnum 是一个枚举。  PID 是 数值型 , Key 是字符串型 , 生成的SQL:
select * from dict where pid = 1 && key = 'Home' ;
*/

6.V95条件表达式增强 In 用法:

MyDb._.FindArray<Annex>(
    Annex._.ID.In(ExtAnnex._.AnnexID, ExtAnnex._.Key 
== "Key1" && ExtAnnex._.Ext == "Value1" )
    ) ;
/*生成的SQL:V95 In 里的查询必须是 单表查询。 
select * from Annex where id in ( select annexid from extannex where key = @key1 and ext = @value1 ) ;
*/

7.V95增加 左联接, 右联接,全联接。

db.From<EquipType>()
.Join
<ExtAnnex>(NBear.Common.JoinType.Left, EquipType._.ID == ExtAnnex._.Ext )
                        
/*  生成的 SQL 
select * from EquipType left join extannex on ( equiptype.id = extannex.ext ) ;
*/

8.V95 增加了 As 方法 , 针对 自查询  。

db.From<Dict>("d1")
.Join
<Dict>("d2" , Dict._.PID.FromAliaTable("d2"== Dict._.ID.FromAliaTable("d1") ) ;
                        
/*  生成的 SQL 
select * from dict as d1  join Dict as d2 on ( d1.pid = d2.id ) ;
*/

9. V95分离出去了 Newtonsoft.Json 项目,集成进来, 不合适。

10. V95增强外键支持,数据库上 子表外键在主表中可以是是 唯一索引列。 V37 中, 子表外键在主表中必须是主键列。参见:NBear.Common.Design.QueryAttribute.QueryAttribute(NBear.Common.Design.QueryType)

另外: V37 中 外键不能是组合键, V95 也是这样。 

11. V37 里对 Oracle 支持不好。 很多标识符用 [] ,Oracle 不认。 V95 里改为了  “” 。 MySQL目前是不支持的, (MySql 是 ··) 。

12.V95 增加 有则修改, 无则添加的简单机制。 NBear.Data.Gateway.AttachToDb<EntityType>(EntityType) 。

Dict showCase = new Dict();
showCase.Key 
= DictOtherKeyEnum.ShowCase.ToString();

// 数据库里没有则插入, 有的话,就更新。
db.AttachToDb(showCase);

showCase.Value 
= this.selEquip.Value;

db.Save(showCase);

12 V95修正了一些Bug 。

子查询 不外传参数值 : NBear.Common.WhereClip.WhereClip(NBear.Common.FromClip) 。

13. 生成工具, 增加两个按钮, 保存配置,读取配置 。方便而已 。

V95源码: https://files.cnblogs.com/newsea/NBear95.rar

alarm   作者:NewSea     出处:http://newsea.cnblogs.com/    QQ,MSN:iamnewsea@hotmail.com

  如无特别标记说明,均为NewSea原创,版权私有,翻载必纠。欢迎交流,转载,但要在页面明显位置给出原文连接。谢谢。
原文地址:https://www.cnblogs.com/newsea/p/1458760.html