ObjectDataSource
で CRUD 操作を実行するために を使用していGridView
ます。アイテムが削除されるとき、外部キー制約に違反していないことを確認できるようにしたいと考えています。違反している場合はObjectDataSourceStatusEventArgs
、ObjectDataSource Deleted
関数で を使用して、プレゼンテーション レイヤーでユーザーにメッセージを表示します。
protected void ods_Deleted(object sender, ObjectDataSourceStatusEventArgs e)
{
if (e.Exception != null)
{
// Display message that was set in either the service or data access layer
}
}
制約は、サービス レイヤーまたはデータ アクセス レイヤーのいずれかでチェックできると思います。
サービス層
// This is the DeleteMethod used by the ObjectDataSource
[DataObjectMethod(DataObjectMethodType.Delete, true)]
public virtual bool Remove(Entity entity)
{
bool CanDelete = functionToSeeIfAnythingIsUsingThisKey(entity.ID);
if (CanDelete)
{
_repository.Remove(entity);
return true;
}
else
{
// would like to populate ObjectDataSourceStatusEventArgs that are sent
// back to the ObjectDataSource onDeleted function in Presentation layer
return false;
}
}
データ アクセス層
public virtual void Remove(Entity entity)
{
_session = NHibernateSessionProvider.GetSession();
try
{
using (ITransaction transaction = _session.BeginTransaction())
{
_session.Delete(entity);
transaction.Commit();
}
}
catch
{
// database will throw an error if the constraint check fails,
// which is caught here
}
}
サービス層関数から返されたものはすべてプレゼンテーション層に戻って確認できることはわかっていますがe.ReturnValue
、他のメンバーObjectDataSourceStatusEventArgs
(つまり、AffectedRows、Exception、OutputParemters など) を設定することは可能ですか?