首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Windows Azure SQL数据库-标识自动增量列跳过值

Windows Azure SQL数据库-标识自动增量列跳过值
EN

Stack Overflow用户
提问于 2013-06-10 01:35:08
回答 4查看 7.1K关注 0票数 17

目前正在使用Entity Framework5开发ASP.Net MVC4应用程序。在初始开发阶段使用CodeFirst。但是现在已经禁用了自动迁移和直接使用SSMS和编写POCO来设计新表。一切都运行良好。

最近,在生产中发现了一个奇怪的问题。其中一个初始设计表中的记录跳过了超过900个数字的自动递增标识值。在过去的3个月里,这种情况已经发生了3次。已在本地调试应用程序,但无法重现。没有观察到任何模式或趋势。

模型:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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);
    }
}

控制器:

代码语言:javascript
复制
[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();
    }
}

到目前为止,所有这些代码都工作得很好,除了identity值被几乎1000个数字的大间隙零星跳过。

有没有人遇到过这样的问题?请分享你的想法。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17012339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档