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;
您丢失了对该对象的引用,并将其替换为您自己的未启用跟踪的对象。
我正式感到困惑。我有一个 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;
您丢失了对该对象的引用,并将其替换为您自己的未启用跟踪的对象。