我正在爲使用MVC.Net框架和實體框架的作業製作「在線ATM」。我遇到的問題如下:我的系統的功能之一是允許用戶從一個帳戶轉移到另一個帳戶。下面是Post方法進行此操作:System.ArgumentException嘗試查找記錄時
[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讀「之類的主鍵值不匹配的實體定義的類型之一見。內部例外的細節。「我不能爲了我的生活,找出如何解決這個問題。
更新的問題:
解決上述問題後,我現在有一個問題,即反式實體,出於某種原因,是試圖找到AccTransfer在餐桌上,這肯定存在後空。
AccTransfer是一個字符串。它需要像以前的調用一樣。嘗試AtmAccount trans = ctx.AtmAccounts.Find(Int32.Parse(AccTransfer)); –
好吧,那解決了那個問題。現在,無論出於何種原因,儘管AccTransfer肯定存在於AtmAccounts中,但我的「trans」實體似乎爲空。 –