Skip to content

RsCode中对数据库的操作

1.配置数据库连接

1.1 appsettings.json中,配置数据库连接

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文件中,添加数据库服务

csharp
public IServiceProvider ConfigureServices(IServiceCollection services)
  {
     string connStr =Configuration.GetConnectionString("DefaultConnection"); 
     services.AddDatabase<MySqlDatabaseProvider>(connStr); 
     string connStr2 =Configuration.GetConnectionString("DefaultConnection2"); 
     services.AddDatabase<SQLiteDatabaseProvider>(connStr2); 
     services.AddUnitOfWork();
  }

如遇找不到连接字符串的情况,检查是否正确添加配置,例

csharp
WebHost.CreateDefaultBuilder(args)
  .ConfigureAppConfiguration((context,config)=>
   {
     config.AddJsonFile("appsettings.json",false,true)
   })

1.3 导入数据库数据库提供程序

例:MySql的数据库提供程序,通过Nuget安装 MySql.Data, Sqlite 安装 System.Data.SQLite

其它数据库提供程序,参考PetaPoco使用

2.操作数据库

2.1使用IApplicationDbContext访问数据

在构造中注入IApplicationDbContext IApplicationDbContext.Current代表当前使用的数据库,默认值是"DefaultConnection" IApplicationDbContext.GetDatabase("dbConnStr")方法可以更换当前使用的数据库

实例代码: 2.1.1添加数据库服务

csharp
//获取mysql数据库连接
string connStr =Configuration.GetConnectionString("DefaultConnection"); 
services.AddDatabase<MySqlDatabaseProvider>(connStr);

2.1.2 操作数据库

csharp
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开启服务

csharp
services.AddUnitOfWork()

2.2.2定义UserInfo实体类,继承IEntity

csharp
[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

csharp
public interface IUserRepository:IRepository<UserInfo>
{
}

public class UserRepository:Repository<UserInfo>,IUserRepository 
{      
}

2.2.3使用Repository

csharp
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");
}

一次查询多个结果

csharp
using(var result=db.QueryMultiple(sql))
{
    var user=result.Read<User>();
    var address=result.Read<Address>();
}

更多接口查看 IRepository类

参考文档:

PetaPoco说明