Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 操作方法仅更新1个表MVC_C#_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

C# 操作方法仅更新1个表MVC

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

我是新手,还在学习asp.NETMVC。我创建了一个send-action方法,它根据帐号和足够的资金从一个用户向另一个用户发送金额。我的程序运行得很好,但每当我尝试从一个帐户向另一个帐户汇款时,更新只在“交易”表上起作用,而在“支票帐户”表上不会发生更新。如果发生转账,支票帐户表应该从余额中扣除,或者根据需要添加到余额中!我在动作方法上有没有遗漏什么?为什么不更新accounts表中的余额?任何帮助都将不胜感激

资金转移诉讼法

 [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
        });