发布自己改的版本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 , 会影响多行记录.如:
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条件表达式增加对枚举的支持。
Dict._.PID == DictRootKeyEnum.Word && Dict._.Key == DictWordKeyEnum.Home
)
/* DictRootKeyEnum 是一个枚举。 PID 是 数值型 , Key 是字符串型 , 生成的SQL:
select * from dict where pid = 1 && key = 'Home' ;
*/
6.V95条件表达式增强 In 用法:
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增加 左联接, 右联接,全联接。
.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 方法 , 针对 自查询 。
.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) 。
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
![]() |
作者:NewSea 出处:http://newsea.cnblogs.com/
QQ,MSN:iamnewsea@hotmail.com 如无特别标记说明,均为NewSea原创,版权私有,翻载必纠。欢迎交流,转载,但要在页面明显位置给出原文连接。谢谢。 |