session.SaveChanges() 不工作

session.SaveChanges() not working

我正式感到困惑。我有一个 Quote 对象已经存在于数据库中,我正在尝试更新它。在我进行更改并调用 SaveChanges()

之后,它似乎永远不会保存到数据库中
   quote = session.Load<Quote>(QuoteID);
        if (quote == null)
        {
            quote = new Quote();
            session.Store(quote);
        }
        else
        {
            temp.Id = quote.Id;
            temp.Lines = quote.Lines;
        }

        quote = temp;
        //breakpoint here, quote has the correct ID and updated info
        session.SaveChanges();

我刷新了页面,它在 Page_Load() 中加载了相同的引用,并将我的文本框设置回旧的陈旧数据。

   List<Quote> DBquotes = session.Query<Quote>().ToList();
        if (DBquotes.Count() == 0) quote = new Quote();
        else
        {
            //TODO: ability to choose/load quote
            QuoteID = DBquotes[0].Id;
        }

        if (!IsPostBack)
        {
            LoadQuote(QuoteID);
            repHW.DataSource = quote.Lines; 
            repHW.DataBind();
        }

这是 LoadQuote() 中的实际负载线

    protected void LoadQuote(string ID)
    {
        quote = session.Load<Quote>(QuoteID);
        ...
    }

我错过了什么?为什么它不想保存我的数据? :/

将引用对象分配给 temp 将不允许您在不执行另一个 session.Store(quote); 的情况下使用 session.SaveChanges() 因此,要么对引用对象本身进行更改,要么再次调用 session.Store(quote);

更多详情: 当您从 Raven 加载一个对象时,它实际上是一个启用了跟踪的代理 class。如果您对此对象进行了更改,那么除了调用 session.SaveChanges() 之外,您无需执行任何其他操作。但是,当您执行此操作时 quote = temp; 您丢失了对该对象的引用,并将其替换为您自己的未启用跟踪的对象。