MySoft组件之MySoft.Data更新日志
MySoft ORM組件
新版組件與之前版本不兼容,實體需要重新生成
鑒于功能的擴展,某些類重構過,方法也有所變動,使用方法基本保持與之前一致
生成工具可以直接生成對應的實體類,而不再需要新建一個項目
原有的方式仍然保留,為了方便設計自定義接口
版本號:1.6.0
1. MySoft.Data批處理和事務處理。
2. 將Trans更名為DbTrans,BeginTran方法更名為BeginTrans,新增DbBatch類。
??? public void AddMessages(Message[] msgs)
??? {
??????? //使用批處理
??????? DbBatch batch = DbSession.Default.BeginBatch();
??????? for (int index = 0; index < msgs.Length; index++)
??????? {
??????????? batch.Save(msgs[index]);
??????? }
??????? batch.Process();
??????? //使用帶事務批處理
??????? DbTrans tran = DbSession.Default.BeginTrans();
??????? DbBatch batch1 = tran.BeginBatch();
??????? for (int index = 0; index < msgs.Length; index++)
??????? {
??????????? batch1.Save(msgs[index]);
??????? }
??????? batch1.Process();
??????? tran.Commit();
??????? //使用單條處理
??????? for (int index = 0; index < msgs.Length; index++)
??????? {
??????????? DbSession.Default.Save(msgs[index]);
??????? }
??????? //使用帶事務單條處理
??????? DbTrans tran1 = DbSession.Default.BeginTrans();
??????? for (int index = 0; index < msgs.Length; index++)
??????? {
??????????? tran1.Save(msgs[index]);
??????? }
??????? tran1.Commit();
??? }
版本號:1.7.6
??? 新增IDataPage類,通過此類來支持HtmlPager操作
??? 使用如下:
??? IDataPage<Message[]> msgInfo = new DataPage<Message[]>(5);
??? msgInfo.RowCount = 15;
??? msgInfo.DataSource = null;
??? string linkFormat = "javascript:gotoPage($PageIndex);";
??? HtmlPager pager = new HtmlPager(msgInfo, linkFormat, 5);
??? pager.NextPageTitle = "Next Page";
??? pager.PrevPageTitle = "Prev Page";
??? pageHtml = pager.ToString();
版本號:1.7.8
1. MySoft.Data修正Entity在Remoting中系列化的問題
2. 修正了OrderByClip和WhereClip在Remoting中生成sql不正確的問題
版本號:1.8.0.0
??? 修正了條件查詢時值存在’符號產生的錯誤!
版本號:2.0
1.MySoft.Data中新增了子查詢功能SubQuery操作
??? DbSession.Default.From<Message>().SubQuery().Select(Message._.ID, Message._.PostTime.Max()).GroupBy(Message._.ID.GroupBy).ToArray();
??? 生成的SQL語句如下:
??? select Message.id,max(Message.posttime) as posttime from(select *from Message) as Message
??? DbSession.Default.From<Message>().SubQuery("c").Select(Message._.ID.At("c"), Message._.PostTime.At("c").Max()).GroupBy(Message._.ID.At("c").GroupBy).ToArray();
??? 生成的SQL語句如下:
??? select c.id,max(c.posttime) as posttime from(select *from Message) as c
??? group by c.id
2.MySoft.Data中修正了枚舉類型從數據庫讀取后轉換的問題
版本號:2.1.0
??? ORM新增內存查詢功能
??? MemoryFrom<Message> query = DbSession.Default.From<Message>().ToMemory();? //獲取主鍵為1的Message信息
??? Message msg = query.Get(1);? //獲取ID為1,2,3的數組
??? Message[] msgs1 = query.Where(Message._.ID.In(1,2,3)).ToArray();
??? //獲取按分頁,每頁10條中的第3頁,Message._.ID是必須的,可以指定為任意列
??? Message[] msgs2 = query.GetPage(Message._.ID,10).ToArray(3);
??? bool exist = query.Exists(Message._.ID == 1);
??? object obj = query.Where(Message._.ID == 1).Sum(Message._.ID);
版本號:2.1.5
1.新增Union操作及分頁處理,進行Union操作的實體同樣可以進行分頁操作
2.修正關聯實體對于多關聯在Access中的出錯的bug
3.全面修正Access中分頁查詢的bug
4.修正Join操作中如果用別名,不選擇字段出現表名不正確的bug
5.修改EntityDisign中對關聯實體中的字段名與屬性名不對應的問題
? 如設計的字段名為{ID},但無法找到此屬性名或ID沒有用{}括起來,則會報錯。
6.修正Oracle、MySql、SQLite、FireBird獲取插入數據后獲取當前記錄號不正確的bug
版本號:2.2.5
1.修正了在項目開發中一些不經常出現的bug
2.批處理中加入返回錯誤列表
3.增加了自定義表名的處理,很多情況下,表需要做分表處理,以往單一表名的定義
??? 已經不能適應這種情況的處理,所以需要傳入表名以操作某一特定的表
??? 下面功能將user實體保存到表UserTest
??? DbSession.Default.Save<User>(new Table("UserTest"),user);
中間過度版本2.4.0,以下更新將與之前版本不兼容
......
版本號:2.5.0
1.增加了增、刪、改、查創建器
??? QueryCreater??? 查詢創建器
??? InsertCreator??? 插入創建器
??? UpdateCreator??? 修改創建器
??? DeleteCreator??? 刪除創建器
2.支持不帶泛型的數據庫查詢方式。
??? QueryCreator q = QueryCreator.NewCreator()
??????? .From("user")
??????? .AddField("userid")
??????? .AddField("username")
??????? .AddWhere("groupid",1);
??? DbSession.Default.From(q).ToTable();
??? DbSession.Default.From(q).ToList<T>();
??? DbSession.Default.From(q).ToListPage<T>();
3.完美支持Oracle,FireBird,SQLite
4.可以生成不帶屬性變更的方法,需設置EntityDesignConfig.xml
??? EnabledPropertyValueChange 為true,則生成,反之不生成
??? 對于多線程操作時,可以選擇不生成OnPropertyValueChange方法,可以提高性能
版本號:2.5.6
1.修正了多個主鍵時使用Get(params object[] pkValues) 會出錯的bug;
2.修正了使用Oracle驅動時間格式不是yyyy-MM-dd HH:mm:ss時,查詢數據出錯的bug;
3.新增新的分布類方式獲取數據,如:
??? 系統已經有一個User實體
??? public partial class User {
??????? public int UserID { get;set;}
??????? public string UserName {get;set;}
??? }
??? 現在為User擴展一個屬性
??? public partial class User {
??????? public string GroupName {get; private set;} //對外只讀
??????? protected override void SetExtValues(ISourceReader reader)
??????????? {
??????????????? if (false == reader.IsDBNull("GroupName"))
??????????????? {
??????????????????? this.GroupName = reader.GetString("GroupName");
??????????????? }
??????????? }
??????? }
??? DbSession.Default.From<User>().LeftJoin<Group>(User._.GroupID == Group._.GroupID)
??? .Select(User._.All,Group._.GroupName).ToList();
??? 這樣User就擁有GroupName屬性了,而不需要重新設計一個實體
??? 而且多出的屬性不會影響到新增與修改操作
版本號:2.5.8
1.增加了ISourceList類,實現了對數據進行分組的功能
??? ISourceList source = new SourceList(IList<User> list);
??? source.ToDictionary<int>(User._.GroupID);
??? 或
??? source.ToDictionary<int>("GroupID");
??? IArrayList 接口還有若干其它方法
2.強化了內存查詢方式
??? ISourceList source = new SourceList(IList<User> list);
??? MemoryFrom<User> mf = source.ToMemory();
??? 或
??? MemoryFrom<User> mf = DbSession.Default.From<User>().ToMemory();
??? mf.Where(User._.UserID == 1).ToSingle();
??? mf.Where(User._.GroupID == 1).OrderBy(User._.AddTime.Desc).ToList();
??? //獲取第2頁,每頁2條
??? mf.Where(User._.GroupID == 1).GetPage(2).ToList(2);
3.將DataPage修改成DataPage以免與System.Data.DataPage沖突
? 將ToDataView()方法改為ToListPage()
版本號:2.6.0
1.將WhereClip的生成參數化,徹底解決sql注入的問題
2.強化了QueryCreator的功能
??? QueryCreator q = QueryCreator.NewCreator()
??????? .From<User>()
??????? .Join<Group>(User._.GroupID == Group._.GroupID)
??????? .AddField(User._.All)
??????? .AddField(Group._.GroupName);
??? 或
??? QueryCreator q = QueryCreator.NewCreator()
??????? .From("user")
??????? .Join("group","user.groupid = group.groupid")
??????? .AddField("user","*")
??????? .AddField("group","groupname");
??? DbSession.Default.From(q).ToList<User>();
??? DbSession.Default.From(q).ToTable();
3.支持表前綴的后期設置
??? 在web項目中添加一個EntityConfig.xml方法,配置如下
??? <?xml version="1.0" encoding="utf-8" ?>
??? <ArrayOfPrefixSetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
????????? <PrefixSetting Name="Default" Value="tb_" />
????????? <PrefixSetting Name="EntityNamespace" Value="tb_" />
??? </ArrayOfPrefixSetting>
??? Default:如未設置EntityNamespace,則默認使用此前綴
??? EntityNamespace: 實體程序集命名空間,如Simple.Entity
??? EntityNamespace可以多個,這樣不同的命令空間可以使用不同的前綴
??? 方便解決多個應用程序使用同一數據的問題
版本號:2.6.5
1.修正了復雜條件使用參數化時產生的bug,比如子查詢 In(Query),Union聯合查詢
2.新增MySql驅動,需要加載MySql.Data.dll
3.新增數據類型IArrayList<T> ISourceList<T> ISourceTable,ISourceReader
??? 使用以上幾種類型可以大大加強返回的數據可操作性
??? ISourceReader接口實現了按fieldName,Field來獲取數據
??? IArrayList實現了ToArray方法
??? ISourceList實現了數據轉換ConvertTo方法,ToGroup方法及ToMemory方法
??? ISourceTable實現了ToList<T>方法及ToMemory方法
??? Get<T>()方法更改為Single<T>()方法,返回單一實體
??? ToFirst()方法更改為ToSingle()方法
??? ToList方法不變,但返回類型為ISourceList
??? ToDataTable方法更改為ToTable,返回類型為ISourceTable
??? ToDataReader方法更改為ToReader,返回類型為ISourceReader
4.新增接口編程方法,可以對應用程序進行解耦,使用如下:
??? public interface IUser {
??????? UserID { get;set;}
??????? UserName {get;set;}
??? }
??? public class User : IUser {
??????? public int UserID { get;set;}
??????? public string UserName {get;set;}
??? }
??? 以下ToList()返回類型ISourceList<T>,可以使用ConvertTo<T>方法進行數據的轉換輸出
??? IList<IUser> list = DbSession.Default.From<User>().ToList().ConvertTo<IUser>();
??? DbSession.Default.Save(IUser as User);
5.新增了DataUtils.ConvertType<T,TOutput>方法,支持字符串數據類型的轉換
??? public class User1 {
??????? public string UserID { get;set;}
??????? public string UserName {get;set;}
??????? public string BornDate { get;set; }
??? }
??? public class User2 {
??????? public int UserID { get;set;}
??????? public string UserName {get;set;}
??????? public DateTime BornDate { get;set; }
??? }
??? User1 user1 = new User1() { UserID = "1", UserName = "test", BornDate = "2009-09-10" };
??? User2 user2 = DataUtils.ConvertType<User1,User2>(user1);
版本號:2.6.6
1.優化了Oracle分頁數據查詢的性能
版本號:2.6.8
1.修正了獲取前N條記錄時返回結果不正確的bug
??? .GetTop(5).ToList() 之前返回為全部數據
??? 對Top結構進行了重構,增加了In語法時的Top查詢
2.修正了Access驅動分頁查詢時參數處理錯誤的bug
3.對Insert,Delete,Update操作內核進行了重要重構
4.新增加了對postgreSQL數據庫的支持
版本號:2.7.0
1.增加從ISourceReader輸出為List的方法
2.增加了對Oracle系列名稱的自定義
public class UserGroupInfo
{
??? public int UserID { get; private set; }
??? public string UserName { get; private set; }
??? public string GroupName { get; private set; }
}
//先返回ISourceReader,然后再返回List;
IList<UserGroupInfo> list = DbSession.Default.From<User>()
??????????????????????????? .LeftJoin<Group>(User._.GroupID == Group._.GroupID)
??????????????????????????? .Select(User._.UserID,User._.UserName,Group._.GroupName)
??????????????????????????? .ToReader() 或者 .ToTable()
??????????????????????????? .ToList<UserGroupInfo>();
如果輸出的列與屬性值不能,可以使用MySoft.Data.Design.Mapping進行標注:
如字段名為UserID,屬性名稱為ID 可以使用如下方式處理
public class UserGroupInfo : IUserGroupInfo
{
??? [MySoft.Data.Design.Mapping("UserID")]
??? public int ID { get; private set; }
??? public string UserName { get; private set; }
??? public string GroupName { get; private set; }
}
//先返回ISourceReader,然后再返回List;
IList<UserGroupInfo> list = DbSession.Default.From<User>()
??????????????????????????? .LeftJoin<Group>(User._.GroupID == Group._.GroupID)
??????????????????????????? .Select(User._.UserID,User._.UserName,Group._.GroupName)
??????????????????????????? .ToReader() 或者 .ToTable()
??????????????????????????? .ToList<UserGroupInfo>();
如果此時使用接口
public interface IUserGroupInfo
{
??? int ID { get; private set; }
??? string UserName { get; }
??? string GroupName { get; }
}
可以使用以下方法轉換:
IList<IUserGroupInfo> ilist = list.ConvertTo<IUserGroupInfo>();
3.新增對象多屬性排序的類
??? SortComparer<Entity> c = new SortComparer<Entity>(
??????????? new SortProperty("PropertyName1").Asc,
??????????? new SortProperty("PropertyName2").Desc,
??????????? new SortProperty("PropertyName31").Asc);
??? new List().Sort(c);
版本號:2.7.2
1.修正了Field.IsNull()條件返回錯誤的bug;
2.修正直接用sql進行查詢或操作時,不用參數化值全部變為大寫的bug.
? 之前是為了適應Oracle必須為大寫的需求,現在已經修正。
? 對Oracle進行個別特殊處理即可
3.修正了where條件參數化后無法進行緩存的bug.
? 之前是用sql進行緩存,而參數化后每次生成的參數名稱不相同,導致緩存無效。
? 解決辦法:將參數的值替換成sql中的參數,從而達到sql一致
4.修正了條件為枚舉時返回的結果不正確的bug
5.修正了調用CacheOff()與CacheOn()方法出錯的bug
下一步開發計劃(MySoft.Data v3.0):
1、增加實體驗證處理 EntityValidator<T>
2、增加MySoft.Data.Linq驅動
轉載于:https://www.cnblogs.com/maoyong/archive/2010/03/01/1675749.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的MySoft组件之MySoft.Data更新日志的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移动端vant时间选择器_vue移动端组
- 下一篇: 安卓模拟器不能上网时可尝试更改成谷歌DN