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 哦,才會有測試資料。還等什麼,快下載下傳下來撸一撸吧。此元件為本人開源,有什麼問題可發到評論裡。