C# 操作方法仅更新1个表MVC
我是新手,还在学习asp.NETMVC。我创建了一个send-action方法,它根据帐号和足够的资金从一个用户向另一个用户发送金额。我的程序运行得很好,但每当我尝试从一个帐户向另一个帐户汇款时,更新只在“交易”表上起作用,而在“支票帐户”表上不会发生更新。如果发生转账,支票帐户表应该从余额中扣除,或者根据需要添加到余额中!我在动作方法上有没有遗漏什么?为什么不更新accounts表中的余额?任何帮助都将不胜感激 资金转移诉讼法C# 操作方法仅更新1个表MVC,c#,asp.net-mvc,asp.net-mvc-5,C#,Asp.net Mvc,Asp.net Mvc 5,我是新手,还在学习asp.NETMVC。我创建了一个send-action方法,它根据帐号和足够的资金从一个用户向另一个用户发送金额。我的程序运行得很好,但每当我尝试从一个帐户向另一个帐户汇款时,更新只在“交易”表上起作用,而在“支票帐户”表上不会发生更新。如果发生转账,支票帐户表应该从余额中扣除,或者根据需要添加到余额中!我在动作方法上有没有遗漏什么?为什么不更新accounts表中的余额?任何帮助都将不胜感激 资金转移诉讼法 [HttpGet] public ActionResul
[HttpGet]
public ActionResult MoneyTransfer(int checkAccountId)
{
return View();
}
[HttpPost]
public ActionResult MoneyTransfer(Transfers transfer)
{
var checkingFunds = DB.checkAccounts.Find(transfer.CheckAccountId);
if (checkingFunds.Balance < transfer.Amount)
{
ModelState.AddModelError("Amount", "You do not have enough money!");
}
var checkingExistedAccount = DB.checkAccounts.Where(account => account.AccountNumber == transfer.checkingExistedAccount).FirstOrDefault();
if (checkingExistedAccount == null)
{
ModelState.AddModelError("checkingExistedAccount", "Account does not exist!");
}
if (ModelState.IsValid)
{
//Transaction transaction = new Transaction();
//transaction.TransactionDate = DateTime.Now;
DB.Transactions.Add(new Transaction { CheckAccountId = transfer.CheckAccountId, Amount = -transfer.Amount });
DB.Transactions.Add(new Transaction { CheckAccountId = checkingExistedAccount.Id, Amount = transfer.Amount });
DB.SaveChanges();
return RedirectToAction("Index","Home");
}
return View();
}
核对帐户模型
public class CheckingAccount
{
public int Id { get; set; }
[Display(Name = "Account Number: ")]
public string AccountNumber { get; set; }
[Display(Name = "Balance: ")]
[DataType(DataType.Currency)]
public decimal Balance { get; set; }
}
交易模型
public class Transaction
{
public int Id { get; set; }
[Required]
[DataType(DataType.Currency)]
[DisplayFormat(ConvertEmptyStringToNull = false)]
public decimal Amount { get; set; }
[Required]
public int CheckAccountId {get; set;}
public DateTime? TransactionDate { get; set; }
public virtual CheckingAccount checkAccount { get; set; }
}
更新:激活TransactionDate属性会引发异常错误
无法将值NULL插入表的列“TransactionDate”
“aspnet dbo.Transactions”;列不允许空值。更新失败。
声明已被终止
无法将值NULL插入表“aspnet dbo.Transactions”的列“TransactionDate”;列不允许空值。更新失败。声明已被终止
这是你的问题。您没有在添加到数据库的新事务记录上设置TransactionDate。即使您的模型将其作为可为空的日期时间,表本身也必须使用它定义为不可为空
DB.Transactions.Add(new Transaction
{
CheckAccountId = transfer.CheckAccountId,
Amount = -transfer.Amount,
TransactionDate = DateTime.Now
});
DB.Transactions.Add(new Transaction
{
CheckAccountId = checkingExistedAccount.Id,
Amount = transfer.Amount,
TransactionDate = DateTime.Now
});
如果希望两个事务具有完全相同的时间戳,请改用变量:
var transactionDate = DateTime.Now;
DB.Transactions.Add(new Transaction
{
CheckAccountId = transfer.CheckAccountId,
Amount = -transfer.Amount,
TransactionDate = transactionDate
});
DB.Transactions.Add(new Transaction
{
CheckAccountId = checkingExistedAccount.Id,
Amount = transfer.Amount,
TransactionDate = transactionDate
});
至于它为什么不更新其他表,我在你的问题中没有看到任何代码实际上在这样做。在回写记录之前,您需要检索支票账户记录并更新其余额。错误表明数据库中的TransactionDate列不允许空值 在事务类中,您可以更改公共日期时间?TransactionDate{get;set;}
to:public DateTime TransactionDate{get;set;},因此在添加事务时需要设置一个日期。粘贴到控制器中的代码不会在粘贴时编译。你真的有一个额外的;在你的方法中?嗨,有一个额外的;并在get方法中删除它!对不起,输入错误!!不,没有;在方法中。您是否得到任何错误或异常?当我启用DateTime时,我是,我必须这样做?要使其为空,错误是什么?你能编辑你的问题并把它包括进去吗?谢谢你的回答,克里斯。我会检查代码,当然,我刚刚意识到,我的代码在传输过程后丢失了余额的更新,仍然抛出了一个错误!即使修改了代码!它抛出的是相同的错误,还是不同的错误?我希望事务表中的日期具有与执行传输时完全相同的时间戳。我禁用了?在transaction类中,使用了与Chris发布的相同的内容,但存在以下错误:无法通过将添加行放入try-catch块的方式将值NULL插入列“TransactionDate”。我知道,但我禁用了try-catch块来诊断程序!创建表[dbo].[Transactions][Id]整数标识1,1不为空,[Amount]十进制18,2不为空,[CheckAccountId]整数不为空,[TransactionDate]日期时间默认值'1900-01-01T00:00:00.000'空,约束[PK_dbo.Transactions]主键聚集[Id]ASC,约束[FK_dbo.Transactions_dbo.CheckingAccounts_CheckAccountId]外键[CheckAccountId]在删除级联时引用[dbo].[CheckingAccounts][Id];好的,我想这是定义表脚本,请尝试通过此值[TransactionDate]DATETIME NOT NULL更改指定部分
var transactionDate = DateTime.Now;
DB.Transactions.Add(new Transaction
{
CheckAccountId = transfer.CheckAccountId,
Amount = -transfer.Amount,
TransactionDate = transactionDate
});
DB.Transactions.Add(new Transaction
{
CheckAccountId = checkingExistedAccount.Id,
Amount = transfer.Amount,
TransactionDate = transactionDate
});