私はASPNETZERO MVC JQuery .Netコア2.0テンプレートにSAASアプリケーションを構築しています。 この問題は、私の以前の号のフォローアップであり、hereと掲載されています。だから私は私の "companyAddress"エンティティテーブルの重複レコードを許可しないように私のアプリケーションサービスでメソッドを追加しました。 createメソッドがinsertAsyncを実行する前に、プライベートメソッドを呼び出して、テーブル内の指定されたレコードをチェックします。ここにアプリのサービスコードがあります。複数回実行するアプリケーションサービスコールを作成する
public async Task CreateCompanyAddress(CreateCompanyAddressInput input)
{
//Check for duplicate before inserting
if (DuplicateCheck(input))
{
return;
}
else
{
//Get current address data
var addr = await _addressRepository.GetAsync(input.AddressId);
//Get current company data
var comp = await _cmpRepository.GetAsync(input.CompanyId);
input.Company = comp;
input.Address = addr;
var CA = input.MapTo<CompanyAddress>();
await _cmpaddressRepository.InsertAsync(CA);
Logger.Info("CompanyAddressService - NEW entry detected. Company Id=" + input.CompanyId + " Address Id=" + input.AddressId);
}
}
private bool DuplicateCheck(CreateCompanyAddressInput input)
{
var duplicate = _cmpaddressRepository.GetAll()
.Where(C => C.Company.Id == input.CompanyId && C.Address.Id == input.AddressId);
var total = duplicate.Count();
if (total > 0)
{
Logger.Info("CompanyAddressService - Duplicate entry detected. Company Id=" + input.CompanyId + " Address Id=" + input.AddressId);
return true;
}
return false;
}
DEBUGでコードを実行すると、私のプライベートメソッドが重複エントリを見つけてtrueを返すことがわかります。しかし、実行コードは飛び回り、突然突然、プライベートメソッドから真を無視し、挿入を行います。 私はこの数十回、クライアント側とサーバー側でデバッグしました。 C#コードでVS2017デバッガを実行すると、デバッガが現在実行中のコードの場所を記録していないように見えることがあります。次に、NursingOps17EntityFrameworkCoreModuleクラスのコードを表示し、以下に示すメソッドに入ります。 IF既存の接続チェックのelse条件を守り続けます。
public override void PreInitialize()
{
if (!SkipDbContextRegistration)
{
Configuration.Modules.AbpEfCore().AddDbContext<NursingOps17DbContext>(options =>
{
if (options.ExistingConnection != null)
{
NursingOps17DbContextConfigurer.Configure(options.DbContextOptions, options.ExistingConnection);
}
else
{
NursingOps17DbContextConfigurer.Configure(options.DbContextOptions, options.ConnectionString);
}
});
}
}
APIコールの途中で接続が失われているようですか?上記のメソッドが呼び出されていることに基づいて、私の一部を推測するだけです。
私はMVCアプリケーションのログファイルを見ています。私はcompanyAddressのAPI作成メソッドが複数回呼び出されるのを見ることができます。ログのスニペットを以下に示します。
INFO 2017-12-19 15:45:46,121 [9 ] ore.Mvc.Internal.ControllerActionInvoker - Executed action EXLNT.NursingOps17.NursingOps.AddressAppService.CreateAddress (EXLNT.NursingOps17.Application) in 18.1348ms
INFO 2017-12-19 15:45:46,122 [9 ] soft.AspNetCore.Hosting.Internal.WebHost - Request finished in 27.7701ms 200 application/json; charset=utf-8
INFO 2017-12-19 15:45:46,128 [4 ] soft.AspNetCore.Hosting.Internal.WebHost - Request starting HTTP/1.1 POST http://localhost:62114/api/services/app/CompanyAddress/CreateCompanyAddress application/json 31
INFO 2017-12-19 15:45:46,131 [9 ] soft.AspNetCore.Hosting.Internal.WebHost - Request starting HTTP/1.1 POST http://localhost:62114/api/services/app/CompanyAddress/CreateCompanyAddress application/json 31
INFO 2017-12-19 15:45:46,133 [10 ] soft.AspNetCore.Hosting.Internal.WebHost - Request starting HTTP/1.1 POST http://localhost:62114/api/services/app/CompanyAddress/CreateCompanyAddress application/json 31
INFO 2017-12-19 15:45:46,136 [4 ] tion.Cookies.CookieAuthenticationHandler - AuthenticationScheme: Identity.Application was successfully authenticated.
INFO 2017-12-19 15:45:46,138 [10 ] tion.Cookies.CookieAuthenticationHandler - AuthenticationScheme: Identity.Application was successfully authenticated.
INFO 2017-12-19 15:45:46,140 [9 ] tion.Cookies.CookieAuthenticationHandler - AuthenticationScheme: Identity.Application was successfully authenticated.
INFO 2017-12-19 15:45:46,146 [4 ] ore.Mvc.Internal.ControllerActionInvoker - Executing action method EXLNT.NursingOps17.NursingOps.CompanyAddressAppService.CreateCompanyAddress (EXLNT.NursingOps17.Application) with arguments (EXLNT.NursingOps17.NursingOps.Dto.CreateCompanyAddressInput) - ModelState is Valid
INFO 2017-12-19 15:45:48,709 [9 ] ore.Mvc.Internal.ControllerActionInvoker - Executing action method EXLNT.NursingOps17.NursingOps.CompanyAddressAppService.CreateCompanyAddress (EXLNT.NursingOps17.Application) with arguments (EXLNT.NursingOps17.NursingOps.Dto.CreateCompanyAddressInput) - ModelState is Valid
INFO 2017-12-19 15:45:49,657 [10 ] ore.Mvc.Internal.ControllerActionInvoker - Executing action method EXLNT.NursingOps17.NursingOps.CompanyAddressAppService.CreateCompanyAddress (EXLNT.NursingOps17.Application) with arguments (EXLNT.NursingOps17.NursingOps.Dto.CreateCompanyAddressInput) - ModelState is Valid
INFO 2017-12-19 15:47:12,504 [10 ] ps17.NursingOps.CompanyAddressAppService - CompanyAddressService - NEW entry detected. Company Id=2 Address Id=3
INFO 2017-12-19 15:47:12,533 [51 ] ps17.NursingOps.CompanyAddressAppService - CompanyAddressService - NEW entry detected. Company Id=2 Address Id=3
INFO 2017-12-19 15:47:12,533 [12 ] ps17.NursingOps.CompanyAddressAppService - CompanyAddressService - NEW entry detected. Company Id=2 Address Id=3
私の努力にもかかわらず、これらの複数の呼び出しをcompanyAddress APIサービスメソッドに引き起こしているトリガーを見つけることができないようです。このような多くの情報だけで、誰かが助けてくれるのは難しいかもしれません。私は独立した開発者で、クライアント用のアプリで一人で作業しています。この問題について誰かが助けてくれれば助かります。
問題が通常発生するのは、です。 会社の編集会社モーダルを開きます。私はモーダルを作成するアドレスを開くには、アドレスボタンを作成をクリックします。私はこれを2〜3回して会社の住所を追加します。これは正常に動作し、companyAddressエンティティは正しく更新されます。 会社を編集してモーダルをキャンセル(キャンセルボタンをクリック)し、私の会社のインデックスビューに戻ります。次に、同じ会社または別の会社の編集会社モーダルを開きます。その後、同じ手順を繰り返して新しい住所を作成します。 companyAddressアプリケーションサービスが2〜4回どこかを複製してトリガーしているときにアドレスを追加するのは、編集会社のこの2回目のモードを開いた直後です。その非常にランダムな、時にはそれは3回以上何度も2回繰り返されます。 会社のエンティティからアプリケーション内の他のページに移動した後、会社のインデックスページに戻り、編集会社のモーダルを開いて、会社に住所を追加しても問題ありません。だから明らかに会社への「最初の」訪問でモーダル編集がうまくいきます。ユーザーが会社のインデックスビューにいて、アプリサービスの重複が発生したことを複数回編集モードで再開したときです。
@aaronキャンセルボタンのクリックイベントは自分のコードの一部ではありません。これは、テンプレートに用意されている_ModalFooterWithSaveAndCancel.cshtmlによって処理されます。 – exlnt