2016-12-07 4 views
-1

Я новичок и все еще изучаю asp.net MVC. Я создал метод отправки отправки, который работает путем отправки суммы денег от пользователя другому на основании номера счета и достаточных средств. Моя программа работает нормально, но всякий раз, когда я пытаюсь отправить деньги из одной учетной записи в другую, обновление работает только в таблице «Транзакции» и никаких обновлений не происходит в таблице CheckingAccounts, которая должна вычитать из баланса - в случае передачи или добавления в нее как требуется! Я что-то пропустил в методе действий? и почему не обновил баланс в таблице aCheckingAccounts? Любая помощь приветствуется!Метод действия обновляется только 1 таблица MVC

денежных переводов Действие Метод

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

Transfer Модель

public class Transfers 
    { 
     [Required] 
     [DataType(DataType.Currency)] 
     public decimal Amount { get; set; } 
     [Required] 
     public int CheckAccountId { get; set; } 
     [Required] 
     [Display(Name ="Recipient Account ID ")] 
     public string checkingExistedAccount { get; set; } 
    } 

CheckingAccount Модель

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

Update: Активация свойства TransactionDate выдает ошибку исключения из

Cannot insert the value NULL into column 'TransactionDate', table 'aspnet-dbo.Transactions'; column does not allow nulls. UPDATE fails. The statement has been terminated

+0

Код, вставленный в ваш контроллер, не будет скомпилирован, как вы его вставили. У вас действительно есть дополнительный ';' в вашем методе? –

+0

Привет, Был дополнительный; и удалил его в методе get! Извините Ошибка Typo! Нет, там нет; в методе. – Dodi

+0

Вы получаете какие-либо ошибки или исключения? –

ответ

1

"Cannot insert the value NULL into column 'TransactionDate', table 'aspnet-dbo.Transactions'; column does not allow nulls. UPDATE fails. The statement has been terminated"

Это ваша проблема. Вы не устанавливаете TransactionDate на новые записи Transaction, которые вы добавляете в базу данных. Несмотря на то, что ваша модель имеет значение NULL DateTime, сама таблица должна быть определена с недействительным значением.

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

Как, почему он не обновляет другую таблицу (ы), я не понимаю любой код в вашем вопросе, который на самом деле это делает. Вам необходимо будет восстановить учетные записи и обновить их балансы до записи записи.

+0

Спасибо за ответ Крис. Я проверю код и, конечно, просто понял, что мой код не пропускает обновление на балансе после процесса передачи. – Dodi

+0

Все еще бросает ошибку! даже после изменения кода! – Dodi

+1

Выбрасывает ту же ошибку или другую ошибку? – MattD

1

Ошибка говорит о том, что столбец TransactionDate в вашей базе данных не допускает нулевого значения.

В классе Transaction вы можете изменить public DateTime? TransactionDate { get; set; } : public DateTime TransactionDate { get; set; }, поэтому вам нужно будет установить дату при добавлении транзакции.

+0

Я хочу, чтобы дата в таблице транзакций имела точно такую ​​же метку времени, а затем выполняла передачу. Я отключил? в классе транзакций и использовал то же, что и Chris, но имел эту ошибку: не могу вставить значение NULL в столбец «TransactionDate» – Dodi

+0

Можете ли вы показать нам «часть DB.Transactions» –

+0

Кстати, вы должны поместить добавляющие строки в блок catch try. –

Смежные вопросы