Baza danych SQL systemu Windows Azure - kolumna Automatyczna inkrementacja tożsamości pomija wartości

Obecnie pracuje nad aplikacją ASP.Net MVC 4 używającą Entity Framework 5. Używana CodeFirst do początkowej fazy rozwoju. Ale teraz wyłączyłem automatyczne migracje i projektowałem nowe tabele bezpośrednio przy użyciu SSMS i pisania POCO. Wszystko działa dobrze.

Niedawno zidentyfikowałem dziwny problem w produkcji. Rekordy w jednej z pierwotnie zaprojektowanych tabel pomijały wartość tożsamości automatycznego przyrostu o więcej niż 900 liczb. Stało się to 3 razy w ciągu ostatnich 3 miesięcy. Debuguj aplikację lokalnie, ale nie można jej odtworzyć. Nie zaobserwowano żadnego wzoru ani trendu.

Model:

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);
    }
}

Kontroler:

[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();
    }
}

Cały ten kod działa do tej pory dobrze, z wyjątkiem sporadycznie pomijanej wartości tożsamości przez duże luki o prawie 1000 liczbach.

Czy ktoś natknął się na taki problem? Podziel się swoimi przemyśleniami.

questionAnswers(4)

yourAnswerToTheQuestion