2017-03-08 19 views
0

我有一個實體與ID字段EF 6插入實體仍然生成ID

public class AgentOrder : BaseEntity 
{ 
     public int Id { get; set; } 
} 

public class AgentOrderMap : EntityTypeConfiguration<AgentOrder> 
{ 
    public AgentOrderMap() 
    { 
     ToTable("AgentOrder"); 
     HasKey(m => m.Id); 
     Property(m => m.Status); 
    } 
} 

創建一個新的實體,並定義Id屬性爲好。但是當我保存更改時,新實體不是通過我定義的Id創建的,而是通過自動生成的Id創建的。

這是關鍵屬性的正常行爲嗎?

+1

首先,什麼是「BaseEntity」,其次,您如何添加實體? – DavidG

+0

數據庫中的Id列配置爲Identity列? –

回答

2

由於您使用流利的配置,你只需要關閉默認標識插入配置:

所以這樣的:

public AgentOrderMap() 
{ 
    ToTable("AgentOrder"); 
    HasKey(m => m.Id); 
    Property(m => m.Status); 
} 

變爲:

public AgentOrderMap() 
{ 
    ToTable("AgentOrder"); 
    HasKey(m => m.Id); 
    Property(m => m.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 
    Property(m => m.Status); 
} 

請注意,您的數據庫n eeds支持這個功能並且身份插入也關閉。

+0

是的,那有效。謝謝。但是,MS SQL需要明確地允許輸入ID字段,所以我決定離開ID字段自動生成並添加一個字段進行手動添加。 – Ralfeus

0

按照慣例,id屬性使用Identity,因此無法手動插入。這樣的配置是:

Property(l => l.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);