Based on the .Net Core API framework structures of (2)

4, add the database support

   Here we add the database support for the project, modify appsettings.json :

 

 

Then we want to generate entity classes, open VS Tools -> NuGet Package Manager -> Package Manager Console:

 

 

input the command:

Scaffold-DbContext "server=.;userid=root;pwd=root;port=3306;database=chainstore;sslmode=none;" Pomelo.EntityFrameworkCore.MySql -OutputDir Models -Force

 

An error occurs when ENTER to proceed:

 

 

Because we do not introduce MySQL support package, we click the right mouse button on the dependencies, select "Manage NuGet Package":

 

 

Note that, the package for a switch to the source: nuget.org

 

 

Then we search: entityframeworkcore

 

 

选择Microsoft.EntityFrameworkCore,目前最新版本是2.2.4,但由于我们Microsoft.AspNetCore.App版本是2.1.1的,需要 Microsoft.EntityFrameworkCore (>= 2.1.1 && < 2.2.0),所以我们选择2.1.8版本,点安装按钮进行安装。

然后再搜索关键字:mysql

 

 

选择Pomelo.EntityFrameworkCore.MySql,目前最新版本是2.2.0,同样由于Microsoft.AspNetCore.App版本所限,我们只能使用2.1.4版本,点安装按钮进行安装。

然后,我们再返回程序包管理器控制台,重新执行上次的命令:

 

 

好,这次成功了,我们看到Models目录多了两个文件:

 

 

打开chainsotreContext.cs,我们将OnConfiguring方法删除,引为我们要在配置文件中配置MySQL的连接字符串,而不是直接写到类中:

 

 

然后解决一个命名规则冲突:

 

 

C#建议的类名为大写字母开头,而自动生成的类为小写字母,我们直接点“解决名称冲突”解决一下就好了。

然后我们打开Startup.cs,引入MySql连接字符串配置:

 

public void ConfigureServices(IServiceCollection services)

{

string MysqlConnectionString = Configuration.GetConnectionString("MysqlConnectionString");

services.AddDbContext<ChainstoreContext>(opt => opt.UseMySql(MysqlConnectionString));

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

}

我们希望增加一个基础控制器类,在其中进行一些基本的控制,比如:检查请求是否合法,防御基本的攻击等,因此我们增加一个BaseController类:

 

 

 

 

 

代码如下:

public class BaseController : ControllerBase

    {

        public readonly ChainstoreContext context;

 

        public BaseController(ChainstoreContext _context)

        {

            this.context = _context;

        }

    }

相同的方法,我们再增加一个包含读写操作的测试控制器类TestController

 

 

 注意修改此类继承自BaseController,增加构造函数继承父类构造函数。

我们想让所有的控制器类返回统一格式的JSON字符串,所以新建一个自定义模型类ResultInfo

 

 

 增加四个字段:CodeMessageDataCurrentTime

    public class ResultInfo

    {

        public string Code { get; set; }

        public string Message { get; set; }

        public object Data { get; set; }

        public DateTime CurrentTime { get; set; } = DateTime.Now;

    }

Code:返回当前操作代码,0为成功

Message:返回当前操作提示信息

Data:返回当前操作相关数据

CurrentTime:返回当前服务器时间戳

 

然后,修改测试控制器类:

查询:

// GET: api/Test

        [HttpGet]

        public ResultInfo Get()

        {

            try

            {

                var result = context.TMember.Where(n => n.Id > 0);

                if (null != result && result.Count() > 0)

                {

                    return new ResultInfo() { Code = "0", Message = "成功", Data = result };

                }

                else

                {

                    return new ResultInfo() { Code = "100002", Message = "未找到相应会员" };

                }

            }

            catch (Exception e)

            {

                return new ResultInfo() { Code = "100001", Message = "查询会员失败:" + e.Message };

            }

        }

 

// GET: api/Test/5

        [HttpGet("{id}", Name = "Get")]

        public ResultInfo Get(int id)

        {

            try

            {

                var result = context.TMember.Where(n => n.Id > 0);

                if (null != result && result.Count() > 0)

                {

                    var member = result.First();

                    return new ResultInfo() { Code = "0", Message = "成功", Data = member };

                }

                else

                {

                    return new ResultInfo() { Code = "100002", Message = "未找到相应会员" };

                }

            }

            catch (Exception e)

            {

                return new ResultInfo() { Code = "100001", Message = "查询会员失败:" + e.Message };

            }

        }

 

增加:

// POST: api/Test

        [HttpPost]

        public ResultInfo Post([FromBody] TMember member)

        {

            try

            {

                member.GradeId = 1;

                member.Status = 1;

                member.Creator = "self";

                member.CreateTime = DateTime.Now;

 

                context.TMember.Add(member);

                context.SaveChanges();

 

                return new ResultInfo() { Code = "0", Message = "成功", Data = member };

            }

            catch (Exception e)

            {

                return new ResultInfo() { Code = "100003", Message = "新增会员失败:" + e.Message, Data = member };

            }

        }

 

修改:

        // PUT: api/Test/5

        [HttpPut("{id}")]

        public ResultInfo Put(int id, [FromBody] TMember member)

        {

            if (id != member.Id)

            {

                return new ResultInfo() { Code = "100004", Message = "会员ID不一致" };

            }

 

            try

            {

                var result = context.TMember.Where(n => n.Id == id);

                if (null != result && result.Count() > 0)

                {

                    var editMember = result.First();

 

                    editMember.UserName = member.UserName;

                    editMember.Password = member.Password;

                    editMember.Name = member.Name;

                    editMember.Sex = member.Sex;

                    editMember.Birthday = member.Birthday;

                    editMember.MaritalStatus = member.MaritalStatus;

                    editMember.GradeId = member.GradeId;

                    editMember.Address = member.Address;

                    editMember.Phone = member.Phone;

                    editMember.Status = member.Status;

                    editMember.Modifier = member.Modifier;

                    context.TMember.Update(editMember);

                    context.SaveChanges();

 

                    return new ResultInfo() { Code = "0", Message = "成功", Data = editMember };

                }

                else

                {

                    return new ResultInfo() { Code = "100006", Message = "会员不存在" };

                }

            }

            catch (Exception e)

            {

                return new ResultInfo() { Code = "100005", Message = "更新会员失败:" + e.Message, Data = member };

            }

        }

 

删除:

        // DELETE: api/ApiWithActions/5

        [HttpDelete("{id}")]

        public ResultInfo Delete(int id)

        {

            try

            {

                //删除会员

                var members = context.TMember.Where(n => n.Id == id);

                if (null != members && members.Count() > 0)

                {

                    context.TMember.RemoveRange(members);

                    context.SaveChanges();

 

                    return new ResultInfo() { Code = "0", Message = "成功", Data = id };

                }

                else

                {

                    return new ResultInfo() { Code = "100008", Message = "此会员不存在", Data = id };

                }

            }

            catch (Exception e)

            {

                return new ResultInfo() { Code = "100007", Message = "删除会员失败:" + e.Message, Data = id };

            }

        }

 

错误代码我们做一下规定,前四位为控制器代码(1000),后两位为具体错误代码(01)。

现在我们运行一下看看效果:

 

 

OK,是我们想要的效果,现在会员表里没有数据,所以找不到相应会员,现在我们用Postman添加一条试试:

 

 

注意上图中红框中的项,点Send”按钮,可以看到提交结果:

 

 

然后查看数据库:

 

 

测试POST成功,数据成功添加到数据库。

然后我们再GET一下看看是否能取到刚才添加的会员:

 

 

可以,成功返回了。

再测试一下删除:

 

 

 

 

数据库中已经没有了,成功删除:

 

 

Guess you like

Origin www.cnblogs.com/yzqnet/p/10934924.html