考慮下面的代碼: -NHibernate如何更新實體中新插入的ID?
public T Save<T>(T instance) where T : class
{
using(ISession.BeginTransaction())
{
ISession.Save(instance);
ISession.Transaction.Commit();
ISession.Refresh(instance);
return instance;
}
}
如何NHibernate
填滿ID
財產與新生成的ID
不論數據庫和數據類型的?最初,我認爲它一定是使用類似的方式,我們手動執行,如MS SQL Server的@@Identity
,SCOPE_IDENTITY
以及其他數據庫的相對查詢。但這不適用於所有數據類型,如GUID
。
當我打電話給ISession.Refresh(instance);
時,我得到新插入的id在instance
對象中。這不是問題,只是想了解如何NHibernate
這樣做。
它取決於id生成器。每個生成器都會以不同的方式執行(https://github.com/nhibernate/nhibernate-core/tree/master/src/NHibernate/Id)。例如,如果你深入研究'MsSql2000Dialect',你會發現這行:'return「select SCOPE_IDENTITY()」;'。不管代是什麼,你都不需要刷新對象來獲得它的id。 –
謝謝@A_J。完成。 –