Entity FrameworkとTelerik RadGridを使用しています。重複した名前の製品が挿入された場合、例外をスローする制約があるテーブルがあります。私はビジネスレイヤーで例外をキャッチしようとしていますが、catchブロックをうまく走っているようですが、Telerik RadScriptManagerからエラーが発生しますエンティティフレームワークで重複挿入エラーが発生する
"Microsoft JScriptランタイムエラー:Sys.WebForms.PageRequestManagerServerErrorException:例外がスローされました呼び出しのターゲットによって。
「Duplicate Product」というメッセージが表示されるJqueryポップアップの代わりに、誰かが間違っていることを知っていますか?例外は私のDALで扱われる必要がありますか?しかし、私はBLL以外のどこかからBusinessRuleExceptionsを投げるべきだとは思わない。誰かがJscriptエラーを引き起こしている可能性があるアイデアがある場合、下のBLクラスにInsert関数を掲載しました。ありがとうございます!
編集 オブジェクトデータソースTypeNameがビジネスレイヤーに関連付けられていますProductBL Product BL関数Insert_ProductがInsert関数としてObjectDataSourceから呼び出されています。 Product.csコードビハインドクラスでは、商品名を渡している場所に商品を挿入する機能があります(下記参照)。この機能にはtry catch bloeckがあります。ここで例外を投げるべきですか?ビジネスレイヤーにBusinessRulExceptionをスローすることが正しいと思いました。あなたはRadGrid_ItemInsertedを活用したいと思うでしょう
Product.CSクラス(データソースInsertコマンドオブジェクト)
protected void ODSProducts_Inserting(object sender, ObjectDataSourceMethodEventArgs e)
{
try
{
TextBox txtProductName = (TextBox)ProductsGrid.MasterTableView.GetInsertItem().FindControl("txtProductName");
((ACME.DAL.Product)e.InputParameters[0]).Product.product_name = txtProductName.Text;
}
catch (Exception ex)
{
HTMLError.HtmlError.LogHtmlError(ex, Application["ErrorLog"].ToString());
throw;
}
}
ProductsBL.CS
public void Insert_Product(Product product)
{
try
{
repository.Insert_Product(product);
}
catch (Exception ex)
{
if (ex.GetType().Name == "UpdateException")
{
throw new BusinessRuleException("Duplicate Product");
}
}
}
Product.DAL
public void InsertProduct(Product product)
{
context.Products.AddObject(product);
context.SaveChanges();
}
Insert_Productを呼び出した場所から、BusinessRuleExceptionを構築する際にexをパラメータとして渡してください。例外は例外ではない場合、Exception型のチェックで置き換えて「ex.InnerException.Message.Contains」という恐ろしいものを削除してください。失敗した場合は、何もログに記録していないか、何かを再スローしていないので、他のすべての例外を隠しています:( –
こんにちはDavide、私は私の説明を更新して、ObjectDataSourceから関数がどのように呼び出されているか、 ex.GetType.Nameをチェックするようにチェックを変更しました。あなたや他の人がJSエラーを取得している理由を知っていれば教えてください – Shokwave