abstractreturningdelegate.cs
来自「NHibernate NET开发者所需的」· CS 代码 · 共 70 行
CS
70 行
using System.Data;
using System.Data.Common;
using NHibernate.Engine;
using NHibernate.Exceptions;
using NHibernate.Impl;
using NHibernate.SqlCommand;
namespace NHibernate.Id.Insert
{
/// <summary>
/// Abstract InsertGeneratedIdentifierDelegate implementation where the
/// underlying strategy causes the generated identitifer to be returned as an
/// effect of performing the insert statement. Thus, there is no need for an
/// additional sql statement to determine the generated identitifer.
/// </summary>
public abstract class AbstractReturningDelegate : IInsertGeneratedIdentifierDelegate
{
private readonly IPostInsertIdentityPersister persister;
public AbstractReturningDelegate(IPostInsertIdentityPersister persister)
{
this.persister = persister;
}
protected virtual internal IPostInsertIdentityPersister Persister
{
get { return persister; }
}
#region IInsertGeneratedIdentifierDelegate Members
public abstract IdentifierGeneratingInsert PrepareIdentifierGeneratingInsert();
public object PerformInsert(SqlCommandInfo insertSQL, ISessionImplementor session, IBinder binder)
{
try
{
// prepare and execute the insert
IDbCommand insert = Prepare(insertSQL, session);
try
{
binder.BindValues(insert);
return ExecuteAndExtract(insert, session);
}
finally
{
ReleaseStatement(insert, session);
}
}
catch (DbException sqle)
{
throw ADOExceptionHelper.Convert(session.Factory.SQLExceptionConverter, sqle,
"could not insert: " + MessageHelper.InfoString(persister), insertSQL.Text);
}
}
#endregion
protected internal virtual void ReleaseStatement(IDbCommand insert, ISessionImplementor session)
{
session.Batcher.CloseCommand(insert, null);
}
protected internal abstract IDbCommand Prepare(SqlCommandInfo insertSQL, ISessionImplementor session);
public abstract object ExecuteAndExtract(IDbCommand insert, ISessionImplementor session);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?