0

ApplicantNumber3 桁の姓を生成し、次にその姓を持つ人の数を生成する必要があります。これは私の最初の試みです。シリアライズ可能なトランザクションは重複を防ぐべきだと思います。しますか?

public string GenerateApplicantNumber(string surname)
{
    using (new TransactionScope(TransactionScopeOption.RequiresNew, new TransactionOptions {IsolationLevel = IsolationLevel.Serializable}))
    {
        return string.Format("{0}{1}", surname.Substring(0, Math.Min(Regex.Replace(surname, @"\s+", "").Length, 3)),
                                _profileService.ReadApplicantProfiles().Count(p => !p.IsDeleted && p.LastName == surname));
    }
}
4

1 に答える 1

2

これにより、場合によっては競合が発生します。

  • 「Foo」という同じ名前の応募者が 2 人いるとします。
  • 申請者 1 は番号「Foo1」を取得し、申請者 2 は「Foo2」を取得します。
  • 次に、申請者 1 のステータスを削除済みに設定します。
  • 「Foo」という名前の 3 番目の申請者がシステムに入ります。
  • 未削除の応募者数は2人なので、3人目の応募者にも「Foo2」という番号が付き、競合が発生します。
于 2013-01-23T11:28:10.863 に答える