簡體   English   中英

savechanges()之后發生意外的值更改

[英]Unexpected value change after savechanges()

我試圖通過Visual Studio 2013在C#中基於實體框架在數據庫上保存值。

我必須保存數據庫拍賣數據。 每次拍賣都有自己的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()調用可以更改該值,因為數據庫上的Auction列沒有限制,我的意思是為什么它不能簡單地為0?

每次我添加拍賣時,ID都會遞增一次,但所有其他參數保持不變。

編輯 :我決定從0開始序列,這就是什么意思。 但是我什至試圖從1開始,這意味着第一次拍賣的id = 1,但是在保存更改之后,它變成了2。

如果Id是數據庫中的自動增量列,則可能會發生這種情況。 當您將其保存到數據庫時,數據庫會將其自身的值放入該列中,並且EntityFramework模型會相應地自動更新。

如果“密鑰”字段是整數,則“代碼優先”默認為DatabaseGeneratedOption.Identity。 因此,如果要添加自己的ID值,則需要配置實體類。 有兩種方法可以做到這一點:

使用數據注釋

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM