Visual Studio Code
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
新建项目文件夹,在终端输入:
dotnet new webapi --no-https --framework netcoreapp2.1
显示SDK版本:
dotnet --list-sdks
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
在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