Windows Azure SQL-Datenbank - Die Spalte "Identität automatisch erhöhen" überspringt Werte
Derzeit wird an einer ASP.Net MVC 4-Anwendung mit Entity Framework 5 gearbeitet. CodeFirst wurde für die erste Entwicklungsphase verwendet. Aber jetzt haben Sie die automatische Migration deaktiviert und neue Tabellen direkt mit SSMS und POCO entworfen. Alles funktioniert gut.
Kürzlich wurde ein seltsames Problem in der Produktion festgestellt. Die Datensätze in einer der ursprünglich entworfenen Tabellen übersprangen den Wert für die automatische Inkrementierung der Identität um mehr als 900 Zahlen. Dies ist in den letzten 3 Monaten dreimal passiert. Die Anwendung wurde lokal debuggt, konnte aber nicht reproduziert werden. Es ist kein Muster oder Trend zu beobachten.
Modell:
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);
}
}
Regler:
[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();
}
}
All dieser Code hat bisher einwandfrei funktioniert, außer dass der Identitätswert sporadisch durch große Lücken von fast 1000 Zahlen übersprungen wird.
Ist jemand auf ein solches Problem gestoßen? Bitte teilen Sie Ihre Gedanken.