【发布时间】:2016-12-15 13:57:38
【问题描述】:
我正在使用 MVC.Net 框架和实体框架为作业制作“在线 ATM”。我遇到的问题如下: 我的系统的功能之一是允许用户从一个帐户转移到另一个帐户。下面是这个动作的 Post 方法:
[HttpPost]
public ActionResult Transfer(decimal TransferAmount, string AccTransfer, string accId, int id)
{
using (var ctx = new BankDBEntities())
{
AtmAccount acc = ctx.AtmAccounts.Find(id);
if (ctx.AtmAccounts.Any(o => o.AccountNumber.Equals(AccTransfer)))
{
AtmAccount trans = ctx.AtmAccounts.Find(AccTransfer);
if (acc.AccountBalance >= TransferAmount)
{
acc.AccountBalance = acc.AccountBalance - TransferAmount;
trans.AccountBalance = trans.AccountBalance - TransferAmount;
ctx.Entry(acc).State = System.Data.Entity.EntityState.Modified;
ctx.SaveChanges();
ctx.Entry(trans).State = System.Data.Entity.EntityState.Modified;
ctx.SaveChanges();
return RedirectToAction("Index");
}
else
{
return RedirectToAction("Transfer");
}
}
else
{
return RedirectToAction("Transfer");
}
}
此方法获取 TransferAmount 和 AccTransfer(要转移到的帐户),以及进行转移的用户的帐户 ID 和用户 ID,它们由关联的视图模型传递。问题似乎出在这行代码中:
AtmAccount trans = ctx.AtmAccounts.Find(AccTransfer);
此时,我收到一个 System.ArgumentException,内容为“主键值之一的类型与实体中定义的类型不匹配。有关详细信息,请参阅内部异常。”我一辈子都无法弄清楚如何解决这个问题。
问题更新:
在解决了上述问题后,我现在遇到了一个问题,即 trans 实体由于某种原因在尝试在表中找到 AccTransfer 后为空,该表肯定存在。
【问题讨论】:
-
AccTransfer 是一个字符串。它需要像您之前的电话一样是 int 。试试 AtmAccount trans = ctx.AtmAccounts.Find(Int32.Parse(AccTransfer));
-
好的,很好,解决了这个问题。现在,无论出于何种原因,我的“trans”实体似乎为空,即使 AccTransfer 肯定存在于 AtmAccounts 中。
标签: c# asp.net-mvc entity-framework model-view-controller