Newcats.DataAccess.Core
1.1.7
See the version list below for details.
dotnet add package Newcats.DataAccess.Core --version 1.1.7
NuGet\Install-Package Newcats.DataAccess.Core -Version 1.1.7
<PackageReference Include="Newcats.DataAccess.Core" Version="1.1.7" />
paket add Newcats.DataAccess.Core --version 1.1.7
#r "nuget: Newcats.DataAccess.Core, 1.1.7"
// Install Newcats.DataAccess.Core as a Cake Addin #addin nuget:?package=Newcats.DataAccess.Core&version=1.1.7 // Install Newcats.DataAccess.Core as a Cake Tool #tool nuget:?package=Newcats.DataAccess.Core&version=1.1.7
Newcats.DataAccess.Core 使用说明
1.实体类
- 1.数据库实体类以Entity结尾
- 2.使用相关特性,对实体类属性进行设置
- TableAttribute:数据库表名,多表连接时为对应的连接关系
- KeyAttribute:数据库主键标识
- DatabaseGeneratedAttribute:数据库生成特性,标识自增、计算列等(插入时会忽略此字段)
- NotMappedAttribute:数据库中不存在此字段时,使用此特性忽略该字段
- ColumnAttribute:实体类别名映射特性,标注数据库实际字段名
默认约定
- 1.若不使用特性,则程序按默认约定进行解析
- 2.表名称为类名,或者类名去掉Entity字符串
- 3.主键为Id字段,或者Id结尾的字段
- 4.推荐使用特性进行设置
UserEntity.cs
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
[Table("User")]
public class UserEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
public string AddressId { get; set; }
[NotMapped]
public string Phone { get; set; }
}
[Table("Address")]
public class AddressEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
}
[Table(" User a left join Address b on a.AddressId=b.Id ")]
public class UserDto
{
[Column("a.Id")]
public int Id { get; set; }
[Column("a.Name")]
public string Name { get; set; }
[Column("b.Name")]
public string Address { get; set; }
}
2.新建自定义DbContext,继承自 Newcats.DataAccess.MySql.DbContext
- 注1:不同的数据库类型继承不同的DbContext基类,此处以MySql为例
- 注2:若使用了多个数据库连接字符串,需要为每个连接字符串分别定义DbContext
MyDbContext.cs
public class MyDbContext : DbContext
{
public MyDbContext(IOptions<DataAccess.Core.DbContextOptions> optionsAccessor) : base(optionsAccessor)
{
}
}
OtherDbContext.cs
public class OtherDbContext : DbContext
{
public OtherDbContext(IOptions<DataAccess.Core.DbContextOptions> optionsAccessor) : base(optionsAccessor)
{
}
}
3.Startup.cs类里注册相应的服务
Startup.cs
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
//第一个DbContext
services.AddMySqlDataAccess<MyDbContext>(opt =>
{
opt.ConnectionString = "ConnectionStringOfMyDbContext";
});
//第二个DbContext
//同一个应用可以注册不同的数据库,例如:services.AddSqlServerDataAccess...
services.AddMySqlDataAccess<OtherDbContext>(opt =>
{
opt.ConnectionString = "ConnectionStringOfOtherDbContext";
});
}
}
4.服务层使用依赖注入获取
UserService.cs
public class UserService : IUserService
{
private readonly Newcats.DataAccess.MySql.IRepository<MyDbContext> _myRepository;
private readonly Newcats.DataAccess.MySql.IRepository<OtherDbContext> _otherRepository;
public UserService(Newcats.DataAccess.MySql.IRepository<MyDbContext> myRepository, Newcats.DataAccess.MySql.IRepository<OtherDbContext> otherRepository)
{
_myRepository = myRepository;
_otherRepository = otherRepository;
}
public async Task<UserEntity> GetAsync(int id)
{
//根据主键Id获取一条记录
return await _myRepository.GetAsync<UserEntity>(id);
}
public async Task<IEnumerable<AddressInfo>> GetListAsync(int top)
{
//获取Id>=30的前top条记录
return await _otherRepository.GetTopAsync<AddressInfo>(top, new List<DbWhere>()
{
new DbWhere(t=>t.Id, 30, OperateTypeEnum.GreaterEqual)
});
}
}
贡献与反馈
如果你在阅读或使用任意一个代码片断时发现Bug,或有更佳实现方式,欢迎提Issue。
对于你提交的代码,如果我们决定采纳,可能会进行相应重构,以统一代码风格。
对于热心的同学,将会把你的名字放到贡献者名单中。
免责声明
- 虽然代码已经进行了高度审查,并用于自己的项目中,但依然可能存在某些未知的BUG,如果你的生产系统蒙受损失,本人不会对此负责。
- 出于成本的考虑,将不会对已发布的API保持兼容,每当更新代码时,请注意该问题。
协议
MIT © Newcats
作者: newcats-2021/11/25
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net6.0
- Dapper (>= 2.0.123)
- Microsoft.Extensions.Options (>= 6.0.0)
NuGet packages (4)
Showing the top 4 NuGet packages that depend on Newcats.DataAccess.Core:
Package | Downloads |
---|---|
Newcats.DataAccess.MySql
Some easy methods for Insert/Delete/Update/Query/InsertBulk/SqlBulkCopy without sql based on Dapper and pure entity class (no attributes needs). Support ReadWriteSplit (multiple read database) with default policy like WeightedRoundRobin/Random/RoundRobin, also provide interface of customize policy. Check detail from github for how to use. |
|
Newcats.DataAccess.SqlServer
Some easy methods for Insert/Delete/Update/Query/InsertBulk/SqlBulkCopy without sql based on Dapper and pure entity class (no attributes needs). Support ReadWriteSplit (multiple read database) with default policy like WeightedRoundRobin/Random/RoundRobin, also provide interface of customize policy. Check detail from github for how to use. |
|
Newcats.DataAccess.PostgreSql
Some easy methods for Insert/Delete/Update/Query/InsertBulk/SqlBulkCopy without sql based on Dapper and pure entity class (no attributes needs). Support ReadWriteSplit (multiple read database) with default policy like WeightedRoundRobin/Random/RoundRobin, also provide interface of customize policy. Check detail from github for how to use. |
|
Newcats.DataAccess.Sqlite
Some easy methods for Insert/Delete/Update/Query/InsertBulk/SqlBulkCopy without sql based on Dapper and pure entity class (no attributes needs). Support ReadWriteSplit (multiple read database) with default policy like WeightedRoundRobin/Random/RoundRobin, also provide interface of customize policy. Check detail from github for how to use. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
2.0.0 | 1,598 | 1/22/2022 |
1.2.6 | 1,079 | 1/9/2022 |
1.2.5 | 1,042 | 12/28/2021 |
1.2.3 | 979 | 12/26/2021 |
1.2.2 | 964 | 12/26/2021 |
1.2.0 | 1,065 | 12/19/2021 |
1.1.9 | 897 | 12/12/2021 |
1.1.8 | 866 | 12/12/2021 |
1.1.7 | 989 | 12/9/2021 |
1.1.6 | 867 | 12/9/2021 |
1.1.5 | 3,587 | 11/25/2021 |
1.1.3 | 934 | 11/18/2021 |
1.1.2 | 872 | 11/18/2021 |
1.1.1 | 986 | 11/18/2021 |
1.1.0 | 853 | 11/18/2021 |
1.0.14 | 979 | 11/18/2021 |
1.0.13 | 898 | 11/17/2021 |
1.0.12 | 890 | 11/17/2021 |
1.0.11 | 855 | 11/17/2021 |
1.0.10 | 1,036 | 10/26/2021 |
1.0.9 | 1,024 | 10/25/2021 |
1.0.8 | 977 | 10/25/2021 |
1.0.7 | 931 | 10/25/2021 |
1.0.6 | 955 | 10/20/2021 |
1.0.5 | 876 | 10/20/2021 |
1.0.4 | 980 | 10/20/2021 |
1.0.3 | 960 | 10/20/2021 |
1.0.2 | 898 | 10/20/2021 |
1.0.1 | 872 | 10/19/2021 |
1.0.0 | 863 | 10/19/2021 |
2021-12-09
1.修复访问修饰符bug
2021-11-25
1.增加详细的使用说明文档,详见github
2021-11-18
1.改为IOptions方式注册服务
2021-11-17
1.IRepository只接收TDbContext,取消TEntity/TPrimaryKey泛型参数
2.主键类型改为object
2021-10-25
1.增加SqlBulkCopy的批量插入接口