2011-03-18 45 views
0

我的控制器:如何使用LINQ和EF來更新數據庫

[HttpPost] 
    public ActionResult Deposit(DepositTicket dt) 
    { 
     using (var db = new MatchGamingEntities()) 
     { 
      MembershipUser currentUser = Membership.GetUser(); 
      Guid UserId = (Guid)currentUser.ProviderUserKey; 
      var MyAccount = from a in db.Accounts 
          where a.UserId == UserId 
          select new Account{ 
           AccountId = a.AccountId,         
           Balance = a.Balance 
           }; 

      BankTransaction transaction = new BankTransaction(); 
      transaction.Amount = dt.Amount; 
      transaction.AccountId = MyAccount.SingleOrDefault().AccountId; 
      transaction.Created = DateTime.Today; 
      transaction.TransactionType = "Credit"; 
      Debug.Write("Amount: " + transaction.Amount + " AccountId " + transaction.AccountId); 
      db.BankTransactions.AddObject(transaction); 
      MyAccount.SingleOrDefault().Balance += transaction.Amount; 
      //Update Query 

      db.SaveChanges(); 
      return View(); 
     } 

凡評論「更新查詢」是,是,我想更新查詢與帳戶對象添加到更新帳戶表。我想更新現有的記錄,這可以使用db.Accounts的預定義函數來完成,還是我必須編寫一個linq查詢?

回答

0

看起來像你會遇到很多麻煩,以獲得自定義帳戶對象,然後只是想更新原始帳戶記錄。我建議只使用原始賬戶對象並進行必要的更新,然後當調用SaveChanges時它會更新您的賬戶記錄。

這裏是我的建議修改

public ActionResult Deposit(DepositTicket dt) 
{ 
    using (var db = new MatchGamingEntities()) 
    { 
     MembershipUser currentUser = Membership.GetUser(); 
     Guid UserId = (Guid)currentUser.ProviderUserKey; 
     var MyAccount = db.Accounts.SingleOrDefault(a => a.UserId == UserId); 

     BankTransaction transaction = new BankTransaction(); 
     transaction.Amount = dt.Amount; 
     transaction.AccountId = MyAccount.AccountId; 
     transaction.Created = DateTime.Today; 
     transaction.TransactionType = "Credit"; 
     Debug.Write(String.Format("Amount: {0} AccountId: {1}", transaction.Amount, transaction.AccountId); 
     db.BankTransactions.AddObject(transaction); 
     MyAccount.Balance += transaction.Amount; 

     db.SaveChanges(); 
     return View(); 
    } 

希望這有助於。

0

db.SaveChanges();會爲你做更新,除非你在db中有預定義的SP。