C# 如何使用linq和EF更新数据库
我的控制器:C# 如何使用linq和EF更新数据库,c#,asp.net,asp.net-mvc-3,C#,Asp.net,Asp.net Mvc 3,我的控制器: [HttpPost] public ActionResult Deposit(DepositTicket dt) { using (var db = new MatchGamingEntities()) { MembershipUser currentUser = Membership.GetUser(); Guid UserId = (Guid)currentUser.Provider
[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();
}
注释更新查询所在的位置,是我要添加更新查询以使用Account对象更新Account表的位置。我想更新现有的记录,这可以使用db.Accounts的预定义函数来完成吗?还是我必须编写linq查询?似乎您要获得一个自定义account对象,然后只想更新原始account记录,会遇到很多麻烦。我建议只使用原始account对象并进行必要的更新,然后在调用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();
}
希望这有帮助。db.SaveChanges;将为您执行更新,除非您在db中预定义了SP