RsCode中对数据库的操作
1.配置数据库连接
1.1 appsettings.json中,配置数据库连接
{
//数据库连接
"ConnectionStrings": {
"DefaultConnection": "Server=127.0.0.1;Uid=root;Pwd=123456;Database=test;Port=3306;",
"DefaultConnection2": "Server=127.0.0.1;Uid=root;Pwd=123456;Database=rswl;Port=3306;"
}
}
1.2Startup.cs文件中,添加数据库服务
public IServiceProvider ConfigureServices(IServiceCollection services)
{
string connStr =Configuration.GetConnectionString("DefaultConnection");
services.AddDatabase<MySqlDatabaseProvider>(connStr);
//string connStr2 =Configuration.GetConnectionString("DefaultConnection2");
//services.AddDatabase<MySqlDatabaseProvider>(connStr2);
services.AddUnitOfWork();
}
1.3 导入数据库数据库提供程序
例:MySql的数据库提供程序,通过Nuget安装 MySql.Data
,其它数据库提供程序,参考PetaPoco使用
2.操作数据库
2.1使用IApplicationDbContext访问数据
在构造中注入IApplicationDbContext IApplicationDbContext.Current
代表当前使用的数据库,默认值是"DefaultConnection" IApplicationDbContext.GetDatabase("dbConnStr")
方法可以更换当前使用的数据库
实例代码: 2.1.1添加数据库服务
//获取mysql数据库连接
string connStr =Configuration.GetConnectionString("DefaultConnection");
services.AddDatabase<MySqlDatabaseProvider>(connStr);
2.1.2 操作数据库
public class Demo
{
IDatabase db;
public void Demo(IApplicationDbContext dbContext)
{
db=dbContext.Current;
//更换数据库
//db=dbContext.GetDatabase("DefaultConnection2");
}
public void test()
{
//插入10000万数据
for (int i = 0; i < 10000; i++)
{
using (db)
{
await db.InsertAsync(new RsCode.TestModel.UserInfo { UserName = DateTime.Now.ToString("yyyyMMddHHmmssfff"), Age = 10 });
}
}
}
}
2.2仓储模式
RsCode自定义封装了一些数据库常用操作,在服务中添加services.AddUnitOfWork(),开启仓储; 实体类继承IEntity,通过IRepository<Entity>
可以操作数据库 IEntity
默认主键类型是long,其它类型要声明,例IEntity<string>
IRepository<T,string>
使用仓储模式的例子 2.2.1开启服务
services.AddUnitOfWork()
2.2.2定义UserInfo实体类,继承IEntity
[TableName("rswl_user_info")]
public partial class UserInfo:IEntity
{
[Column("Id")]
public long Id { get; set; }
[Column("UserName")]
public string UserName { get; set; }
}
2.2.3实现Repository
public interface IUserRepository:IRepository<UserInfo>
{
}
public class UserRepository:Repository<UserInfo>,IUserRepository
{
}
2.2.3使用Repository
IUserRepository repository;
public UserController(IUserRepository rep)
{
repository=rep;
}
//仅演示代码
public async Task Demo()
{
//instance user
var user=new UserInfo(){...};
await repository.InsertAsync(user); //添加,返回自动分配新记录的主键,对于非自动递增表为空。
await repository.DeleteAsync(user); //删除,返回授影响的行数
await repository.UpdateAsync(user); //更新,返回授影响的行数
//select
await repository.FirstOrDefaultAsync(); //查单条
await repository.QueryAsync(); 返回IEnumerable
await repository.FetchAsync(); //返回List
await repository.PageAsync(page,rows); 返回Page<>
await repository.QueryMultiple(sql,args); //一次查询多个结果
repository.Exists("where id=@0",new object[]{123}); //指定条件的记录是否存在
//更换数据库
repository.ChangeDataBase("connStrName");
}
一次查询多个结果
using(var result=db.QueryMultiple(sql))
{
var user=result.Read<User>();
var address=result.Read<Address>();
}
更多接口查看 IRepository类
参考文档:
© 2022 rscode.cn MIT license