使用Net Core+SqlSugar完成一个Dome
1.建立一个模型层,放Dome数据库的表
- 建立模型层
先在我们的Model中引入库包 SqlSugarCore
这是关于SqlSugar的文档也可以先看看: link.
添加表数据 内联代码片
。
public class User:BaseModel
{
[SugarColumn(IsPrimaryKey =true)]
public Guid Id { get; set; }
[SugarColumn(ColumnDataType = "nvarchar(30)")]
public string Name { get; set; }
[SugarColumn(ColumnDataType = "nvarchar(255)")]
public string Password { get; set; }
}
2.建立一个仓储层,用来进行对数据的访问
然后添加仓储层 直接放图吧
先看接口层的
我这边只是写了基类的接口 内联代码片
。详细的可以在文档里也是有描述的。
public interface IBaseRepository<T> where T:class,new()
{
Task<bool> Save(T item);
Task<bool> Update(T item);
Task<bool> Delete(int Id);
Task<T> Get(int Id);
}
我放一些简单的增删改查,基本上文档上都有
这边的 ISqlSugarClient 如果你不引入SqlSugarCore,就会报错 ,其中 base.Context.DbMaintenance.CreateDatabase();
base.Context.CodeFirst.InitTables(
typeof(User),
typeof(books)
);这些只是创建数据库用的,执行过一次就可以注释掉了 内联代码片
。
public BaseRepository(ISqlSugarClient context = null) : base(context)//注意这里要有默认值等于null
{
base.Context = DbScoped.SugarScope;
base.Context.DbMaintenance.CreateDatabase();
base.Context.CodeFirst.InitTables(
typeof(User),
typeof(books)
);
}
public async Task<T> Get(int Id)
{
return await base.GetByIdAsync(Id);
}
public async Task<bool> Save(T item)
{
return await base.InsertAsync(item);
}
public virtual async Task<bool> Update(T item)
{
try
{
return await base.UpdateAsync(item);
}
catch (Exception e)
{
throw;
}
}
public async Task<bool> Delete(int Id)
{
return await base.DeleteByIdAsync(Id);
}
}
3.在Api这边设置注入
然后就需要回到我们的API开始注册 依赖了
下面展示一些 内联代码片
。
首先我们先对SqlSugar进行注入,不然仓储层那边就会报错
services.AddSqlSugar(new IocConfig()
{
ConnectionString = Configuration["ConnectionStrings:Server"],
DbType = IocDbType.SqlServer,
IsAutoCloseConnection = true//自动释放
});
ConnectionStrings:Server是数据库连接字符串我放到了Json中
其中Library就是我们要创建的数据库名称,首先我们数据库是没有这个库的 内联代码片
。
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": { "Server": "Data Source=.;Initial Catalog=Library;User ID=sa;Password=123456" }
}
然后接下来就是对仓储层的依赖
接口在前,实现在后内联代码片
。
service.AddTransient<IbookRepository,bookRepository>();
service.AddTransient<IBookService, BookService>();
最后我贴一个api控制器的
下面展示一些 内联代码片
。
BaseResponse是我自己定义的传输基类
[Route("api/[controller]")]
[ApiController]
public class BookController : ControllerBase
{
public readonly IBookService _BookService;
public BookController(IBookService bookService) {
_BookService = bookService;
}
[HttpPost]
public async Task<BaseResponse<bool>> Save(BookModel Item)
{
var book = new books()
{
Name = Item.Name,
Author = Item.Author,
Creater = new Guid(),
CreateDate=DateTime.Now
};
var result = await _BookService.Save(book);
return new BaseResponse<bool>(result.Code, result.Message,result.Result);
}
[HttpGet("GetList")]
public async Task<BaseResponse<List<books>>> GetList(string Name, int PageIndex, int PageSize)
{
var result = await _BookService.GetList(Name, PageIndex, PageSize);
return new BaseResponse<List<books>>(result.Code, result.Message, result.Result);
}
/// <summary>
/// 查询详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
[HttpGet("Get")]
public async Task<BaseResponse<books>> Get(int Id)
{
var result = await _BookService.Get(Id);
return new BaseResponse<books>(result.Code, result.Message, result.Result);
}
[HttpPut]
public async Task<BaseResponse<bool>> Update(BookModel Item)
{
var list = await _BookService.Get(Item.Id);
if (list.Code.Equals(200))
{
var book = new books()
{
Id = Item.Id,
Name = Item.Name,
Author = Item.Author,
Update = new Guid(),
UpdateDate = DateTime.Now
};
var result = await _BookService.Update(book);
return new BaseResponse<bool>(result.Code, result.Message, result.Result);
}
return new BaseResponse<bool>(list.Code, list.Message, false);
}
}
主要给前端发送需要的信息 内联代码片
。
public class BaseResponse<T>
{
public BaseResponse(int _Code, string _Message,T _Item)
{
this.Code = _Code;
this.Message = _Message;
this.Item = _Item;
}
public int Code { get; set; }
public string Message { get; set; }
public T Item { get; set; }
}
最后应该没有什么了
跑一遍界面吧