Linq更新数据库视图中的值

本文关键字:视图 更新 数据库 Linq | 更新日期: 2023-09-27 18:04:41

我是一名硒自动化测试人员。我尝试在可视化2013中添加表到数据模型,因为表有层次结构,它抛出了错误。所以,我找到了一个使用视图的方法。现在我需要使用sql更新视图中的值。我用

var acct = context.Regression_TestAccounts.Where(f => f.Account_ID.Equals(acctId))
                                          .FirstOrDefault();
acct.AvailableDailyCreditLimit_Amt = acct.ApprovedDailyCreditLimit_Amt;
acct.AvailableTotalCreditLimit_Amt = acct.ApprovedTotalCreditLimit_Amt;

这不会对值进行任何更改。有人能帮我一下吗?

Linq更新数据库视图中的值

好吧,有很多代码是您遗漏的。这不是Selenium的问题。这是一个"我不知道实体框架"的问题。首先,您必须调用SaveChanges()来持久化对象中的任何更新。此外,建议使用Transactions,以便您可以在更新期间恢复任何可能的问题。此外,这里还有一篇关于如何添加/附加实体状态的文章。这样你就可以更新对象了。

public void Update(int acctId)
{
    using(var context = new Context())
    {
        using(var dbContextTransaction = new context.Database.BeginTransaction())
        {
            try
            {
                //improved query
                var acct = context.Regression_TestAccounts
                                  .FirstOrDefault(f => f.Account_ID == acctId);   
                if(acct == null) //don't just return, tell the user there was no update
                    return;  
                acct.AvailableDailyCreditLimit_Amt = acct.ApprovedDailyCreditLimit_Amt;
                acct.AvailableTotalCreditLimit_Amt = acct.ApprovedTotalCreditLimit_Amt;
                context.Entry(acct).State = acct.Account_ID == 0 
                                          ? EntityState.Added 
                                          : EntityState.Modified;
                context.SaveChanges();
                dbContextTransaction.Commit();
            }
            catch (Exception ex)
            {
                dbContextTransaction.Rollback();
                throw;
            }
        }
    }
}