昨天我们建立一个File资料表要来储存档案实体路径
CREATE TABLE [dbo].[File]
(
[Id] CHAR(36) NOT NULL PRIMARY KEY,
[Name] NVARCHAR(50) NOT NULL
)
接下来我们要对Product资料表进行修改,加个栏位储存图片FileID,并对File资料表做关联
ALTER TABLE [dbo].[Product] ADD [FileId] CHAR (36);
ALTER TABLE [dbo].[Product] ADD FOREIGN KEY ([FileId]) REFERENCES [dbo].[File](Id);
修改完後,再一次执行我们的EF Core反向工具,重新建立资料库模型。
Scaffold-DbContext "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=AspCoreIThelp2020;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" -OutputDir Models Microsoft.EntityFrameworkCore.SqlServer -Force
现在我们新增档案的Action就要做多个步骤,储存档案、对File资料表做写入、对Product资料表做写入
[HttpPost]
public async Task<IActionResult> AddProduct(AddProductViewModel productViewModel)
{
if (ModelState.IsValid)
{
//取得使用者上传档案的原始档名
var fileOriginName = Path.GetFileName(productViewModel.File.FileName);
//取原始档名中的副档名
var fileExt = Path.GetExtension(fileOriginName);
//为避免使用者上传的档案名称发生重复,重新给一个乱数名称
var fileNewName = Path.GetRandomFileName();
//指定要写入的路径、档名和副档名
var filePath = "/data/" + fileNewName + fileExt;
//将使用者上传的档案写入到指定路径
await using (var stream = System.IO.File.Create(filePath))
{
//执行写入
await productViewModel.File.CopyToAsync(stream);
}
var file = new Models.File()
{
Id = Guid.NewGuid().ToString(),
Name = fileNewName + fileExt
};
var last = _context.Product.OrderByDescending(d => d.Id).FirstOrDefault();
var product = new Product()
{
Id = last.Id + 1,
Name = productViewModel.Name,
FileId = file.Id
};
_context.File.Add(file);
_context.Product.Add(product);
_context.SaveChanges();
return RedirectToAction("Index");
}
return View(productViewModel);
}
>>: 第二十七天:UI切版 & 元件-按钮元件、常用的表单元件
我们昨天已经测试了一个Json的API, 那我们今天将测试方法改成这样 public functio...
事情是这样的 大一下学期时,学长丢了一个网站 叫我一样画葫芦刻出来 只要版面配置相像就好,图片、功能...
发现一个可以在网页端学 Swift的地方-->google colab A Swift Tou...
Spring Boot 使用 Annotation 撰写 OpenAPI Definition 我们...
前言 本文说明使用Python建立Telegram Bot-echo测试 。 程序实作 from t...