vb.net - 使用 ASP.NET Core MVC 将多行插入数据库
问题描述
我有一个个人 ASP.NET Core MVC 项目。在我的旧网站上有一个表单,我使用存储过程,然后使用代码隐藏(VB.Net)我可以将两条记录插入同一个表中。
我目前正在努力将整个转换为 ASP.NET Core MVC。我发现整个 CRUD 过程相当简单,但遇到了一个问题。我想使用一种形式插入两行数据。我有两个表 -帐户和资金(FK AccountId)。我想要表格将资金从一个帐户转移到另一个帐户。所以一行数据应该是
AccountId =1, Description ="Transfer", Date=05/06/2020, PaymentType=Transfer Out
接着
AccountId =2, Description ="Transfer", Date=05/06/2020, PaymentType=Transfer In
我想我已经整理了视图,但我坚持使用 Post 的代码。我可能可以让它做一张唱片,但我怎么做两张呢?
这是我到目前为止所尝试的:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("FromAccountId,ToAccountId,Date,Amount")] TransferViewModel fund)
{
if (ModelState.IsValid)
{
Fund saveFund = new Fund();
_db.Attach(saveFund);
saveFund.AccountId = fund.FromAccountId ;
saveFund.Description = "Transfer out";
saveFund.Date = fund.Date;
saveFund.Amount = fund.Amount;
saveFund.PaymentTypeId = 4;
saveFund.CreatedBy = User.Identity.Name.ToString();
saveFund.CreatedDate = DateTime.Now;
await _db.SaveChangesAsync();
{
saveFund.AccountId = fund.ToAccountId;
saveFund.Description = "Transfer in";
saveFund.Date = fund.Date;
saveFund.Amount = fund.Amount;
saveFund.PaymentTypeId = 8;
saveFund.CreatedBy = User.Identity.Name.ToString();
saveFund.CreatedDate = DateTime.Now;
await _db.SaveChangesAsync();
}
return RedirectToAction(nameof(Index));
}
ViewData["FromAccountId"] = new SelectList(_db.Account, "AccountId", "Name");
ViewData["ToAccountId"] = new SelectList(_db.Account, "AccountId", "Name");
return View(fund);
}
这似乎拥有所有数据,但只保存最后一条记录。我添加了一个简单的视图模型,以便可以将 ToAccountId 与 FromAccountId 分开。
好的,我想我已经解决了:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("FromAccountId,ToAccountId,Date,Amount")] TransferViewModel fund)
{
if (ModelState.IsValid)
{
Fund saveFund1 = new Fund();
_db.Attach(saveFund1);
{
saveFund1.AccountId = fund.FromAccountId;
saveFund1.Description = "Transfer out";
saveFund1.Date = fund.Date;
saveFund1.Amount = fund.Amount;
saveFund1.PaymentTypeId = 4;
saveFund1.CreatedBy = User.Identity.Name.ToString();
saveFund1.CreatedDate = DateTime.Now;
}
Fund saveFund2 = new Fund();
_db.Attach(saveFund2);
{
saveFund2.AccountId = fund.ToAccountId;
saveFund2.Description = "Transfer in";
saveFund2.Date = fund.Date;
saveFund2.Amount = fund.Amount;
saveFund2.PaymentTypeId = 8;
saveFund2.CreatedBy = User.Identity.Name.ToString();
saveFund2.CreatedDate = DateTime.Now;
}
_db.Fund.Add(saveFund1);
_db.Fund.Add(saveFund2);
await _db.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
ViewData["FromAccountId"] = new SelectList(_db.Account, "AccountId", "Name");
ViewData["ToAccountId"] = new SelectList(_db.Account, "AccountId", "Name");
return View(fund);
}
有人想改进这个吗?
解决方案
推荐阅读
- java - 在两个数据中心模式下测试 Consul
- c# - 如何为模型中的可枚举对象编写 Html.DropDownListFor()?
- java - 压缩和解压缩一个大文件而不将整个文件加载到 apache Camel 的内存中
- svg - svg def 中定义的白色线性渐变,不显示白色渐变。为什么 ?
- datepicker - 角度 4 中的日期显示落后一个月
- c# - 使用 AutoMapper 问题对控制器进行单元测试
- python - boto3 描述 VPC 连接 - 区域在哪里?
- python - Hyperas TypeError:一元操作数类型错误-:'list'
- c# - 了解 mvc 控制器中的依赖注入
- google-cloud-platform - 在 apache 光束流中以固定间隔触发