使用.Net Core 2.1 + Entity FrameWork Core快速构建WebAPI

使用.Net Core 2.1 + Entity FrameWork Core构建WebAPI

开发环境

Visual Studio Code

  • Visual Studio Code
  • 用于 Visual Studio Code 的 C#(最新版本)
  • .NET Core 2.1 SDK 或更高版本

Visual Studio Code 说明使用用于 ASP.NET Core 的 .NET Core CLI 开发功能,如项目创建。 可在任何平台(macOS、Linux 或 Windows)上或在任何代码编辑器中遵循这些说明。 如果使用 Visual Studio Code 以外的其他内容,则可能需要进行少量更改。 有关在 macOS 上安装 Visual Studio Code 的详细信息,请参阅macOS 上的 Visual Studio Code。

安装VScode插件:Chinese、C#、NuGet Gallery、vscode-icons

新建.Net Core Web Api项目

新建项目文件夹,在终端输入:

dotnet new webapi --no-https --framework netcoreapp2.1

显示SDK版本:

dotnet --list-sdks

vscode中使用EF脚手架生成数据库上下文(scaffold-dbcontext)

DB First,在项目文件终端输入:

dotnet ef dbcontext scaffold "Server=.;Database=Supermarket;UID =sa;PWD=123456" Microsoft.EntityFrameworkCore.SqlServer -o Models

其他属性

-f []
强制脚手架覆盖现有文件。否则,只有在没有输出文件被覆盖的情况下,代码才会继续。

-t
指定要为其生成类的表。

.net core 3.0+环境,dotnet ef命令无法使用的解决办法

在项目文件终端输入:

dotnet new globaljson --sdk-version 2.1.500 --force

Json序列化

在Startup.cs配置

using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;

public void ConfigureServices(IServiceCollection services)
{
    //使用IMvcBuilder 配置Json序列化处理
    services.AddMvc()
        .AddJsonOptions(options =>
        {
            options.SerializerSettings.ContractResolver = new DefaultContractResolver();
            options.SerializerSettings.DateFormatString = "yyyy-MM-dd";
        });
}

连接数据库的写法改进

针对EF脚手架生成数据库上下文的连接属性的情况来看,我们不应该把连接的属性编写在代码中,因此我们要设计一下,把连接的属性编写在配置文件中,对appsettings.json,Startup.cs,CoreDbContext.cs进行相关的配置,如下所示。

删除CoreDbContext.cs中的:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
                optionsBuilder.UseMySQL(@"Server=.;Database=Supermarket;user id=sa;password=123456;");
            }
        }

在中appsettings.json中添加conn:

{
     
  "Logging": {
     
    "LogLevel": {
     
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
     
    "conn": "Server=.;Database=Supermarket;UID =sa;PWD=123456"
  }
}


Startup.cs添加:

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
       //连接 mysql 数据库,添加数据库上下文
       services.AddDbContext(opt => opt.UseSqlServer(Configuration.GetConnectionString("conn")));

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

增删查改示例

private readonly SupermarketContext _context;

public StaffController(SupermarketContext context)
{
    _context = context;

}

// GET: api/Staff
[HttpGet]
public async Task> GetStaffs()
{
    var staff =  _context.Staff.ToList();
    return Ok(staff);
}

// GET: api/Staff/5
[HttpGet("{id}")]
public async Task> GetStaff(int id)
{
    var staff = await _context.Staff.FindAsync(id);
    if (staff == null)
    {
        return NotFound();
    }

    return Ok(staff);
}

// POST api/Staff
[HttpPost]
public async Task> CreateStaff([FromBody] Staff staff)
{

    _context.Staff.Add(staff);
    await _context.SaveChangesAsync();

    return Ok(new{Staffid = staff.Staffid});
}

// Delete api/Staff
[HttpDelete("{id}")]
public async TaskDeleteStaff(int id)
{
    var staff = await _context.Staff.FindAsync(id);
    if (staff == null)
    {
        return NotFound();
    }

    _context.Staff.Remove(staff);
    await _context.SaveChangesAsync();

    return Ok(new{info = "删除成功!"});
}

// Put api/Staff
[HttpPut("{id}")]
public async Task UpdateStaff(int id,[FromBody] Staff staff)
{
    var haveStaff = _context.Staff.Find(id);
    if (haveStaff == null)
    {
        return NotFound();
    }

    haveStaff.Name = staff.Name;


    _context.Staff.Update(haveStaff);
    await _context.SaveChanges();

    return NoContent();
}

其它语法

查找名字等于张三的用户信息:

//查找名字等于张三的用户信息
var FindUser = _context.ShopUser.Where(u => u.name == "张三");
if (FindUser.Count() == 0)
{
	//没有找到
}

获取请求头:

//获取请求头
var headers = HttpContext.Request.Headers;
if(headers.ContainsKey("SessionKey"))
{
    //验证请求头是否有key
    
    console.log(headers["ShopSessionKey"][0]);
}

获取新建数据的自增ID:

//获取新建数据的自增ID
_context.User.Add(NewUser);
_context.SaveChanges();
_context.Entry(NewUser);
var Id = NewUser.Id

你可能感兴趣的:(.net,core,c#,后端,sql,服务器,restful)