savechanges() 后意外的值变化

Unexpected value change after savechanges()

我正在尝试通过 visual studio 2013 in c# 在基于 Entity Framework 的数据库上保存一个值。

我必须保存 DB 拍卖数据。每个拍卖都有自己的 id,一个 int,这是它的主键。

当我尝试在数据库上添加拍卖时,我执行以下操作:

using(var c = new AuctionSiteContext(ConnectionString)
{
var auction = new Database.Auction
       {
              Id = auctionId,    //auctionId=0
              /*
              other stuff
              */
       };
c.Auctions.Add(auction);
c.SaveChanges();
}

问题是 auctionId 设置为 0,我通过调试器检查了它,但是当我执行 saveChanges(); 时并再次控制网站上唯一拍卖的价值,其 Id 已更改为 1。

老实说,我不明白为什么 savechanges() 调用可以更改该值,因为数据库上的拍卖列没有限制,我的意思是,为什么它不能简单地为 0?

每次我添加拍卖时它都会这样做,将 id 递增 1,但所有其他参数保持不变。

edit:我决定从0开始序列,就是这个意思。但我什至尝试从 1 开始,这意味着第一次拍卖的 id=1,但在保存更改后它变成了 2.

如果 Id 是数据库中的自动递增列,就会发生这种情况。当您将其保存到数据库时,数据库会将自己的值放入该列,您的 EntityFramework 模型会相应地自动更新。

在 Key 字段为 Integer 的情况下,Code First 默认为 DatabaseGeneratedOption.Identity。所以,如果你想添加你自己的 Id 值,你需要配置你的实体 class。有两种方法可以做到这一点:

使用Data Annotations:

[DatabaseGenerated(DatabaseGeneratedOption.None)]
[Key]
public int Id { get; set; }

使用Fluent Api:

在您的上下文中,覆盖方法 OnModelCreating 并执行此操作:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
  modelBuilder.Entity<Auction>()
  .HasKey(t => t.Id)
  .Property(t => t.Id)
  .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}