شروع کار با LiteDB

دوشنبه 11 آبان 1394

در این مقاله با استفاده از یک مثال ساده میخواهیم نشان دهیم که چگونه میتوان با استفاده از LiteDB اسناد و مدارک را مدیریت کرد . LiteDB مبتنی بر پایگاه داده nosql توسط دیوید موریسیو توسعه داده شده است.

شروع کار با LiteDB

در این مقاله با استفاده از یک مثال ساده میخواهیم نشان دهیم که چگونه میتوان با استفاده از LiteDB اسناد و مدارک را مدیریت کرد

LiteDB مبتنی بر پایگاه داده nosql  توسط  دیوید موریسیو توسعه داده شده است. این پایگاه داده سبک می باشد .

LiteDB به طور کامل متن باز و رایگان می باشد.

برنامه ای که در این مقاله استفاده میکنیم با استفاده از سی شارپ نوشته شده است و قابلیت افزودن نام و شماره و جستجو، حذف و افزودن را دارد .

برای مطالعه بیشتر LiteDB میتوانید از لینک  LiteDB Document Store استفاده نمایید.

تصویر زیر برنامه ما را نشان میدهد .

کلاسی با نام Issue ایجاد میکنیم و مانند زیر فیلد ها را ایجاد میکنیم.

public class Issue  
{  
    [BsonId]  
    public Guid IssueId  
    {  
        get;  
        set;  
    }  
    public DateTime DateTime  
    {  
        get;  
        set;  
    }  
    public string ErrorText  
    {  
        get;  
        set;  
    }  
    public string IssueType  
    {  
        get;  
        set;  
    }  
}  

این برنامه دارای یک صفحه برای نمایش و مدیریت تمام امکانات برنامه از قبیل حذف کردن و افزودن و فیلترینگ می باشد.

برای کار ما باید در درایو C پوشه ای با نام Temp ایجاد نماییم و در داخل ان پوشه ای با نام  DB را به ان اضاف کنیم.

یک متد Add ایجاد میکنیم و کد زیر را در ان قرار میدهیم.

public void Add(Issue issue)  
{  
    // Open data file (or create if not exits)  
    using(var db = new LiteEngine(liteDBPath))  
    {  
        var issueCollection = db.GetCollection < Issue > ("issues");  
        // Insert a new issue document  
        issueCollection.Insert(issue);  
        IndexIssue(issueCollection);  
    }  
}  

همانطور که در زیر میبینید ما از Lambda استفاده کرده ایم. ما به راحتی میتوانیم رکورد ها را با معیار های خاص فیلتر کنیم.

private void IndexIssue(Collection < Issue > issueCollection)  
{  
    // Index on IssueId  
    issueCollection.EnsureIndex(x => x.IssueId);  
    // Index on ErrorText  
    issueCollection.EnsureIndex(x => x.ErrorText);  
    // Index on DateTime  
    issueCollection.EnsureIndex(x => x.DateTime);  
    // Index on IssueType  
    issueCollection.EnsureIndex(x => x.IssueType);  
}  

قطعه کد زیر برای بروز رسانی میباشد.

public void Update(Issue issue)  
{  
    // Open data file (or create if not exits)  
    using(var db = new LiteEngine(liteDBPath))  
    {  
        var issueCollection = db.GetCollection < Issue > ("issues");  
        // Update an existing issue document  
        issueCollection.Update(issue);  
    }  
}  

کد زیر برای حذف براساس شماره شناسه موجود است.

public void Delete(Guid issueId)  
{  
    using(var db = new LiteEngine(liteDBPath))  
    {  
        var issues = db.GetCollection < Issue > ("issues");  
        issues.Delete(i => i.IssueId == issueId);  
    }  
}  

کد زیر برای نمایش تمام رکورد های موجود در بانک است.

public IList < Issue > GetAll()  
{  
    var issuesToReturn = new List < Issue > ();  
    using(var db = new LiteEngine(liteDBPath))  
    {  
        var issues = db.GetCollection < Issue > ("issues");  
        var results = issues.All();  
        foreach(Issue issueItem in results)  
        {  
            issuesToReturn.Add(issueItem);  
        }  
        return issuesToReturn;  
    }  
}  

در  کد  زیر  که یک کالکشن از نمونه های Issue بر می گرداند  آورده شده است.به کد زیر توجه کنید با وجود اینکه ما نمونه ای از نوع DateTime پاس داده ایم ولی تنها می توانیم از  مقدار Date استفاده کنیم .

public IList < Issue > Get(string issueType, DateTime datetime)  
{  
    var issuesToReturn = new List < Issue > ();  
    using(var db = new LiteEngine(liteDBPath))  
    {  
        var issues = db.GetCollection < Issue > ("issues");  
        IEnumerable < Issue > filteredIssues;  
        if (issueType.Equals("All")) filteredIssues = issues.All();  
        else filteredIssues = issues.Find(i => i.IssueType.Equals(issueType));  
        foreach(Issue issueItem in filteredIssues)  
        {  
            issuesToReturn.Add(issueItem);  
        }  
        return issuesToReturn.FindAll(i => i.DateTime.Date == datetime.Date);  
    }  
}  

آموزش سی شارپ

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 2k بازدید
  • 1 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید