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 哦,才会有测试数据。还等什么,快下载下来撸一撸吧。此组件为本人开源,有什么问题可发到评论里。