天天看點

推薦開源資料庫通路元件 - DapperEx

DapperEx 是一款資料庫通路元件,支援 Sqlserver 和 PostgreSql。她提供了 Lambda 表達式方式的操作。她以 Dapper 作為底層,提供更友善快捷的資料庫通路方式。

适用平台: .Net Framework 4.5.1 及以上  .Net Standard 2.0 及以上。

項目位址:https://github.com/zl33842901/DapperEx

與 EF 異同:同 EF 一樣,都提供了表達式方式的資料庫操作風格。但是 DapperEx 不是一款 ORM,僅是一款資料庫通路元件,非常輕量級。

适用項目:如果您想在通路資料庫時使用表達式,但又不想使用 EF 那樣的重型ORM,那 DapperEx 是一個不錯的選擇。尤其是在您使用 PostgreSql 的 Jsonb 字段時,DapperEx 提供了一種友好的方式。

安裝方法:在 Nuget 管理器裡查找 xLiAd.DapperEx,把 xLiAd.DapperEx.MsSql.Core、xLiAd.DapperEx.Repository 安裝到您的資料通路層或基礎設施層項目。如果您使用 PostgreSql 資料庫,還需要安裝 xLiAd.DapperEx.RepositoryPg。

使用方法:

1,您需要編寫實體類,DapperEx 沒有提供代碼生成功能,您可以手寫實體類,或使用代碼生成工具。例如:

public class Author
    {
        [Identity]
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
        public int AId { get; set; }
    }
           

在此代碼中,Identity 特性代表辨別字段,Key 特性代表主鍵,不與資料庫對應的字段要加 NotMapped 特性。

2,您要執行個體化一個倉儲。例如:

Repository<Author> reposAuthor = new Repository<Author>
("Data Source=127.0.0.1;Initial Catalog=資料庫名;Persist Security Info=True;User ID=sa;Password=密碼");
           

3,您可以愉快地通路資料庫了。例如:

reposAuthor.Where(x => x.Name == "張三"); //查找 Name 為 張三 的所有資料。
reposAuthor.UpdateWhere(x => x.Id == 5, x => x.Name, "李四"); //把 Id 為5的資料的 Name,改為李四。
           

注:增删改查都提供了友好的使用方法,等待您自己去挖掘。對于剛剛執行過的 SQL 操作,Repository 提供了 SqlString 和 Params 兩個屬性,來調試是否執行了正确的 Sql 語句和參數。

對于 PostgreSql 資料庫,DapperEx 提供了對 Jsonb 字段的友好支援。您可以像下面這樣編寫代碼:

public class Author
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime BirthDay { get; set; }
    }
    [Table("News2", Schema = "public")]
    public class News2
    {
        [Key]
        [Identity]
        public int Id { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }
        [JsonColumn]
        public Author[] Author { get; set; }
    }
    [Table("News", Schema = "public")]
    public class NewsTest
    {
        [Key]
        [Identity]
        public int Id { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }
        [JsonColumn]
        public Author Author { get; set; }
    }
           

注意 NewsTest 類和 News2 類的 Author 字段,都是複雜類型。需要在設計資料庫時,設定為 Jsonb 類型字段;并且要在代碼裡加上 JsonColumn 特性。

這樣無論增删改查時,DapperEx 都會支援這個字段。例如:

string constring = "Host=127.0.0.1;Port=5432;Database=資料庫;Username=postgres;Password=密碼";
RepositoryPg<NewsTest> RepoNews => new RepositoryPg<NewsTest>(constring);
var rst = RepoNews.Where(x => x.Author.Name.Contains("張")); //查詢 Author 的 Name 包含張的。

RepositoryPg<News2> RepoNews2 => new RepositoryPg<News2>(constring);
var rst2 = RepoNews2.FieldAny<Author>(x => x.Author, x => x.Name.Contains("張") && x.Id > 2)
.Where(x => true, x => x.Title);
//查詢 Author 集合字段裡 Name 包含張,且 Id 大于2的;取這樣資料的 Title 字段。
           

另:在測試項目裡,有比較詳細的各種操作的示例代碼,注意下載下傳下來需要先執行 SQL 哦,才會有測試資料。還等什麼,快下載下傳下來撸一撸吧。此元件為本人開源,有什麼問題可發到評論裡。