0

我需要生成一个ApplicantNumber具有三个姓氏数字的数字,然后是具有该姓氏的人数。这是我的第一次尝试。我认为可序列化事务应该防止任何重复。会吗?

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”的申请人。
  • 申请人 1 将获得数字“Foo1”,申请人 2 将获得“Foo2”。
  • 现在您将申请人 1 的状态设置为已删除。
  • 第三个名为“Foo”的申请人进入系统。
  • 未删除的申请者数量为2,因此第三个申请者也会得到数字“Foo2”,从而产生冲突。
于 2013-01-23T11:28:10.863 回答