[英]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.