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。有两种方法可以做到这一点:
[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);
}
我正在尝试通过 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。有两种方法可以做到这一点:
[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);
}