В настоящее время работает над приложением ASP.Net MVC 4 с использованием Entity Framework 5. Используется CodeFirst для начальной фазы разработки. Но теперь отключены автоматические миграции и проектирование новых таблиц напрямую с использованием SSMS и написания POCO. Все работает хорошо.База данных Windows Azure SQL - Identity Auto increment column пропускает значения
В последнее время выявлена странная проблема в Production. Записи в одной из первоначально разработанных таблиц пропустили значение автоинкрементного значения более чем на 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 чисел.
Неужели кто-нибудь сталкивался с такой проблемой? Пожалуйста, поделитесь своими мыслями.
Посмотрите здесь: https://connect.microsoft.com/SQLServer/feedback/details/739013/alwayson-failover -results-in-reseed-of-identity –
@Rosiek, я не вижу никакого хорошего готового к использованию решения там at может применяться к SQL Azure Web Edition в MS Cloud. – Santosh
Я вижу ту же проблему. Любая удача в этом разобраться? –