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); 
     services.AddUnitOfWork();
  }

注:数据库提供程序,参考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类

参考文档:

PetaPoco说明

results matching ""

    No results matching ""