База данных Windows Azure SQL - в столбце автоматического увеличения идентификатора значения пропускаются

В настоящее время работает над приложением ASP.Net MVC 4 с использованием Entity Framework 5. На начальном этапе разработки использовался CodeFirst. Но теперь отключили автоматическую миграцию и создание новых таблиц напрямую с использованием SSMS и написания POCO. Все работает хорошо.

Недавно выявлена странная проблема в производстве. Записи в одной из первоначально разработанных таблиц пропускали значение идентификатора с автоматическим приращением более чем на 900 номеров. Это происходило 3 раза за последние 3 месяца. Отладил приложение локально, но не смог воспроизвести. Там не наблюдается какой-либо модели или тенденции.

Модель:

public class Enquiry
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public Int64 EnquiryId { get; set; }

    [Required]
    public int UserId { get; set; }

    [Required]
    public byte Bid { get; set; }

    ...

    [Required]
    public DateTime Created { get; set; }

    [Required]
    public DateTime Modified { get; set; }
}

public class EnquiryDetail
{
    [Key]
    public Int64 EnquiryId { get; set; }

    [Required]
    public int CreditScore { get; set; }

    [Required]
    public byte BidMode { get; set; }

    public virtual Enquiry Enquiry { get; set; }
}

DbContext:

public class EscrowDb : DbContext
{

    public EscrowDb()
        : base("name=DefaultConnection")
    {

    }
    public DbSet<Enquiry> Enquiries { get; set; }
    public DbSet<EnquiryDetail> EnquiryDetails { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        modelBuilder.Entity<EnquiryDetail>()
            .HasRequired<Enquiry>(ed => ed.Enquiry)
            .WithRequiredDependent(e => e.EnquiryDetail);
    }
}

контроллер:

[Authorize]
public class EnquiryController : Controller
{
    private EscrowDb _db = new EscrowDb();

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(EnquiryViewModel core)
    {
       var enquiry = new Enquiry();
       // Some code to set properties using passed ViewModel
       ...

       var enquiryDetail = new EnquiryDetail();
       // Some code to set properties using passed ViewModel
       ...

       enquiry.EnquiryDetail = enquiryDetail;

       _db.Enquiries.Add(enquiry);
       _db.SaveChanges();
    }
}

До сих пор весь этот код работал нормально, за исключением того, что значение идентификатора время от времени пропускалось из-за больших пробелов почти в 1000 чисел.

Кто-нибудь сталкивался с такой проблемой? Пожалуйста, поделитесь своими мыслями.

Ответы на вопрос(4)

Ваш ответ на вопрос