日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分享Db4o的便捷封装类源码

發布時間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分享Db4o的便捷封装类源码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

導言

大家好,話說真是好久好久沒寫文章了,哈哈。

最近在寫網站,個人對傳統數據庫天然抵觸,感覺非常繁冗,即便是Entity Framework也過于龐雜了,Db4o這種輕量級且讀寫、配置都極其方便的新型數據庫非常適合我。

不過我發現Db4o這么多年發展下來,竟然仍舊沒多少中文資料可尋,很奇怪為什么這么優秀的數據庫國內使用率極低呢?于是我就想嘗試自己來寫一些心得什么的,為Db4o在國內的傳播盡微薄之力吧。

此次分享的是自己寫的工具類代碼,封裝了Db4o的一種基本使用方式,高度優化了調用體驗,下面直接介紹用法,源代碼在文章末尾貼出。

初始化

如果是桌面應用的話,那就在程序開始時直接初始化即可:

/// <summary>/// Db4o服務器管理器/// </summary>public static Db4oServerManager Db4oServerManager=new Db4oServerManager("db.db4o");

如果是網站,建議在Global.asax里作為網站核心類的靜態屬性,并在網站啟動時初始化:

public class MvcApplication : System.Web.HttpApplication{/// <summary>/// Db4o服務器管理器/// </summary>public static Db4oServerManager Db4oServerManager;protected void Application_Start(){AreaRegistration.RegisterAllAreas();FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);RouteConfig.RegisterRoutes(RouteTable.Routes);BundleConfig.RegisterBundles(BundleTable.Bundles);Db4oServerManager = new Db4oServerManager(Server.MapPath(System.Configuration.ConfigurationManager.ConnectionStrings["db4o"].ConnectionString));}public override void Dispose(){Db4oServerManager.Dispose();base.Dispose();}}

然后記得在Web.config里配置數據庫存放路徑:

<connectionStrings><add name="db4o" connectionString="/App_Data/db.db4o"/></connectionStrings>

調用方法

注:下文以網站項目為例

建議采用Lambda表達式方法調用:

//無返回值調用方法MvcApplication.Db4oServerManager.Access(q =>{//查找相同ID的對象,以進行更新,否則直接存儲將存儲為新對象var u = q.Query<ApplicationUser>(t => t.Id == user.Id).First();u.用戶信息.名稱 = model.DisplayName;//必須明確存儲子對象才能得到正確更新,因為默認貌似沒有開啟級聯更新(新建對象存儲時會默認自動存儲子對象,但更新對象時不會自動更新子對象) q.Store(u.用戶信息);}); //有返回值調用方法return MvcApplication.Db4oServerManager.AccessAndReturn(q => q.Query<WebSite.Models.ApplicationUser>(t => t.UserName == User.Identity.GetUserName()).First().用戶信息.名稱)

下面是傳統一些的調用方式:

using (var dbsa = MvcApplication.Db4oServerManager.CreatAccessor()){var finduser = dbsa.Query<TUser>(q => q.Id == user.Id).FirstOrDefault();dbsa.Delete(finduser);}

源代碼

/// <summary>/// Db4o服務器訪問器。注意,對數據進行修改后必須釋放此對象才能真正的將更改提交到服務器。建議配合using(var dbsa=new Db4oServerAccessor(...)){...}語句使用/// </summary>// ReSharper disable once InconsistentNamingpublic class Db4oServerAccessor : IDisposable{// ReSharper disable once InconsistentNamingprivate IObjectContainer DBContainer { get; set; }/// <summary>/// 構造函數/// </summary>/// <param name="serverManager">Db4o服務器管理器</param>public Db4oServerAccessor(Db4oServerManager serverManager){DBContainer = serverManager.OpenClient();}public void Store(object o){DBContainer.Store(o);}public IDb4oLinqQuery<T> Query<T>(Predicate<T> p){return from T q in DBContainer where p(q) select q;}public IDb4oLinqQuery<T> QueryAll<T>(){return from T q in DBContainer select q;}public int Count<T>(IDb4oLinqQuery<T> collection){return collection.Count();}public int CountAll<T>(){return QueryAll<T>().Count();}public int Count<T>(Predicate<T> p){return Query(p).Count();}public int CountAllByExt<T>(){foreach (var storedClass in DBContainer.Ext().StoredClasses()){if (storedClass.GetName() == typeof(T).FullName) return storedClass.InstanceCount();}return 0;}public void Delete(object o){DBContainer.Delete(o);}public void Delete<T>(Predicate<T> p){foreach (var f in Query<T>(p)){Delete(f);}}#region IDisposable 成員public void Dispose(){DBContainer.Dispose();}#endregion} /// <summary>/// Db4o服務器管理器/// </summary>// ReSharper disable once InconsistentNamingpublic class Db4oServerManager : IDisposable{private IObjectServer _db4OServer;private readonly string _dbFilePath;/// <summary>/// 構造函數/// </summary>/// <param name="dbFilePath">數據庫文件路徑,通常使用Server.MapPath("/xxxx/xx.xx")函數獲取到。</param>public Db4oServerManager(string dbFilePath){_dbFilePath = dbFilePath;OpenServer();}private void OpenServer(){IServerConfiguration serverConfig = Db4oClientServer.NewServerConfiguration();_db4OServer = Db4oClientServer.OpenServer(serverConfig, _dbFilePath, 0);}/// <summary>/// 開啟一個客戶端實例/// </summary>/// <returns>客戶端實例</returns>public IObjectContainer OpenClient(){Begin:try{return _db4OServer.OpenClient();}catch{OpenServer();goto Begin;}}/// <summary>/// 創建一個服務器訪問器對象。注意,對數據進行修改后必須釋放此對象才能真正的將更改提交到服務器。/// </summary>/// <returns>一個服務器訪問器對象</returns>public Db4oServerAccessor CreatAccessor(){return new Db4oServerAccessor(this);}/// <summary>/// 創建并訪問一個服務器訪問器對象。/// </summary>/// <param name="action">對服務器訪問器對象的操作行為</param>public void Access(Action<Db4oServerAccessor> action){using (var dba = CreatAccessor()){action(dba);}}/// <summary>/// 創建并訪問一個服務器訪問器對象,繼而獲得返回值。/// </summary>/// <param name="action">對服務器訪問器對象的操作行為</param>/// <typeparam name="T">返回值類型</typeparam>public T AccessAndReturn<T>(Func<Db4oServerAccessor,T> action){T v = default(T);using (var dba = CreatAccessor()){v= action(dba);//System.Diagnostics.Debug.WriteLine(v.ToString()); }return v;}#region IDisposable 成員public void Dispose(){_db4OServer.Dispose();}#endregion}

結語

最后容我再鄭重向大家強力推薦一下Db4o,真心的,桌面、網站、移動無往不利,你值得擁有。

轉載于:https://www.cnblogs.com/SkyD/p/3574651.html

總結

以上是生活随笔為你收集整理的分享Db4o的便捷封装类源码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲性网 | 国产一级精品视频 | 97色婷婷| 黄色一级片免费播放 | 丁香九月激情 | 国产丝袜视频 | 少妇精品无码一区二区三区 | av片网址 | 日本免费一区二区三区最新 | 淫视频在线观看 | 嫩草影院懂你的影院 | 理论片琪琪午夜电影 | 红桃视频黄色 | 91高清在线免费观看 | 天堂网亚洲 | 99精品视频一区二区三区 | 成人黄色小说在线观看 | 成人看片网站 | 波多野结衣av电影 | 污视频网站在线看 | 成人一级网站 | 久操视频在线免费观看 | 99久久夜色精品国产亚洲 | 久久久久久久久久久久久国产 | 国产大片一区二区 | 九九久久久 | 全部免费毛片在线播放高潮 | av日韩中文字幕 | 欧美激情偷拍 | 涩涩五月天| 中日精品一色哟哟 | 97综合视频 | 综合在线播放 | 国家队动漫免费观看在线观看晨光 | 欧美一级淫片免费视频黄 | 国产v在线观看 | 夜色导航| 中文国语毛片高清视频 | 日日碰狠狠躁久久躁蜜桃 | 日本免费一区二区三区四区五六区 | 韩国视频一区二区三区 | 全部毛片永久免费看 | 国产亚洲精品久久久久久久久动漫 | 男人的天堂黄色 | 一本色道久久综合亚洲精品按摩 | 黄色大片久久 | 超碰成人福利 | 成人91网站 | 欧美综合一区二区三区 | 国产精品乱码 | av色网站 | 西西人体做爰大胆gogo直播 | 亚洲 欧美 成人 | 91成人在线观看高潮 | 久久久国产精品成人免费 | 97视频成人 | 狠狠干狠狠操 | www.色综合.com | 永久免费在线看片 | 中国女人真人一级毛片 | 91精品国产综合久久精品图片 | 久久人人爽人人爽人人片亚洲 | 日韩aⅴ在线观看 | 亚洲另类xxxx | 日本狠狠操 | 中文字幕日产 | 精品日本视频 | 99久热在线精品996热是什么 | 欧美性福利 | av无码精品一区二区三区宅噜噜 | 国产视频三区 | 一区二区日韩在线观看 | 亚洲精品一区二区三区中文字幕 | 麻豆视频免费网站 | 色老大视频 | 欧美一级片在线免费观看 | 看黄色的网站 | 成人羞羞国产免费游戏 | 2018av| 在线观看免费国产 | 亚洲第一综合 | 超碰97人人爱 | 善良的老师伦理bd中字 | 手机在线中文字幕 | 清草视频 | 精品中文字幕一区 | 国内成人精品视频 | 欧美精品在线观看 | 久久久夜夜夜 | 91理论片 | 性欧美巨大 | 欧美亚洲国产视频 | 在线免费观看污 | 成人美女视频 | 国产不卡一区二区视频 | 被黑人啪到哭的番号922在线 | 婷婷久久伊人 | 欧美人与性禽动交精品 | 久久一区二区三区视频 |