NetCore+Dapper WebApi架構搭建(三):添加實體和倉儲


上一節講了類庫添加一些底層的基本封裝,下面來添加實體和倉儲

1、Entities文件夾添加一個實體類Users,繼承BaseModel,即擁有BaseModel的主鍵

 1 using System;
 2 
 3 namespace Dinner.Dapper.Entities
 4 {
 5     public class Users : BaseModel
 6     {
 7         /// <summary>
 8         /// 用戶名
 9         /// </summary>
10         public string UserName { get; set; }
11 
12         /// <summary>
13         /// 密碼
14         /// </summary>
15         public string Password { get; set; }
16 
17         /// <summary>
18         /// 性別(0女,1男)
19         /// </summary>
20         public int Gender { get; set; }
21 
22         /// <summary>
23         /// 出生年月日
24         /// </summary>
25         public DateTime Birthday { get; set; }
26 
27         /// <summary>
28         /// 創建日期
29         /// </summary>
30         public DateTime CreateDate { get; set; }
31 
32         /// <summary>
33         /// 是否刪除(0正常,1刪除)
34         /// </summary>
35         public int IsDelete { get; set; }
36     }
37 }
View Code

2、IRepository中添加一個IUsersRepository倉儲接口,注意倉儲接口的寫法規范 I+實體名+Repository,對應的倉儲業寫法貴方 實體名+Repository,這么寫不僅是日常規范更是為后面的依賴注入做鋪墊

繼承自IRepositoryBase<Users> 這個泛型接口,如果你還要定義其他操作,應該自定義接口的新操作方法,然后在實現類中實現自定義的方法

 1 using Dinner.Dapper.Entities;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Threading.Tasks;
 5 
 6 namespace Dinner.Dapper.IRepository
 7 {
 8     public interface IUserRepository : IRepositoryBase<Users> 
 9     {
10         #region 擴展的dapper操作
11 
12         //加一個帶參數的存儲過程
13         string ExecExecQueryParamSP(string spName, string name, int Id);
14 
15         Task<List<Users>> GetUsers();
16 
17         Task PostUser(Users entity);
18 
19         Task PutUser(Users entity);
20 
21         Task DeleteUser(Guid Id);
22 
23         Task<Users> GetUserDetail(Guid Id);
24 
25         #endregion
26     }
27 }
View Code

3、Repository中添加一個UserRepository接口實現類繼承自RepositoryBase<Users>, IUserRepository

 1 using Dapper;
 2 using Dinner.Dapper.Entities;
 3 using Dinner.Dapper.IRepository;
 4 using System;
 5 using System.Collections.Generic;
 6 using System.Data;
 7 using System.Threading.Tasks;
 8 
 9 namespace Dinner.Dapper.Repository
10 {
11     public class UserRepository : RepositoryBase<Users>, IUserRepository
12     {
13         public async Task DeleteUser(Guid Id)
14         {
15             string deleteSql = "DELETE FROM [dbo].[Users] WHERE Id=@Id";
16             await Delete(Id, deleteSql);
17         }
18 
19         public string ExecExecQueryParamSP(string spName, string name, int Id)
20         {
21             using (IDbConnection conn = DataBaseConfig.GetSqlConnection())
22             {
23                 DynamicParameters parameters = new DynamicParameters();
24                 parameters.Add("@UserName", name, DbType.String, ParameterDirection.Output, 100);
25                 parameters.Add("@Id", Id, DbType.String, ParameterDirection.Input);
26                 conn.Execute(spName, parameters, null, null, CommandType.StoredProcedure);
27                 string strUserName = parameters.Get<string>("@UserName");
28                 return strUserName;
29             }
30         }
31 
32         public async Task<Users> GetUserDetail(Guid Id)
33         {
34             string detailSql = @"SELECT Id, UserName, Password, Gender, Birthday, CreateDate, IsDelete FROM [dbo].[Users] WHERE Id=@Id";
35             return await Detail(Id, detailSql);
36         }
37 
38         public async Task<List<Users>> GetUsers()
39         {
40             string selectSql = @"SELECT Id, UserName, Password, Gender, Birthday, CreateDate, IsDelete FROM [dbo].[Users]";
41             return await Select(selectSql);
42         }
43 
44         public async Task PostUser(Users entity)
45         {
46             string insertSql = @"INSERT INTO [dbo].[Users](Id, UserName, Password, Gender, Birthday, CreateDate, IsDelete) VALUES(@Id, @UserName, @Password, @Gender, @Birthday, @CreateDate, @IsDelete)";
47             await Insert(entity, insertSql);
48         }
49 
50         public async Task PutUser(Users entity)
51         {
52             string updateSql = "UPDATE [dbo].[Users] SET UserName=@UserName, Password=@Password, Gender=@Gender, Birthday=@Birthday, CreateDate=@CreateDate, IsDelete=@IsDelete WHERE Id=@Id";
53             await Update(entity, updateSql);
54         }
55     }
56 }
View Code

Dapper就是寫純Sql語句的,這很考驗Sql功底,不像EF那樣,寫幾個Linq就解決了,不過視圖,函數,存儲過程都是通用的,Dapper可以,EF也可以

這個Dapper的數據庫和表需要你自己創建,不比EF可以自動生成

上面建的實體,倉儲接口和倉儲實現都是為了演示而已,你們若想添加其他實體,倉儲就自定義添加,不過一定要遵循命名規范。

下一節我們轉到Web Api層,來實現倉儲的依賴注入

源碼地址: https://github.com/wangyulong0505/Dinner


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM