2017-10-11 146 views
0

我有一個通用的存儲庫,我有一個將數據保存到數據庫的方法。知道我正在改變一箇舊的系統,我遇到了這種情況:使用實體框架在數據庫內插入數據

例如,當我必須保存區域時,需要根據數據庫插入的最後一個值插入字段的ID ,但由於某種原因,當我試圖堅持這一點,出現一個錯誤,告訴我不能將空值插入到表的id中。

我試着這樣做:

areaRepository.Save(new Area{AreaCode = 999, AreaName = "teste"}); 
areaRepository.SaveAll(); 

的保存方法是:

public void Save(T obj) 
{ 
    ctx.Set<T>().Add(obj); 
} 

而且保存所有方法

public void SaveAll() 
{ 
    ctx.SaveChanges(); 
} 

執行白水回收方法的錯誤上升後。

{ 「ORA-01400:無法插入(\空」 CELG \ EPW_AREAS \ AREA_CODE \」 \ 「」 \ 「」)\諾拉-06512:在line 4" }

知道我試圖強制AREA_CODE值,爲什麼實體框架不會添加它並將該值視爲null?

有沒有辦法強制它?

有沒有人可以幫忙?

感謝您的建議。

更新:

實體類:

[Table("EPW_AREAS", Schema="CELG")] 
public class Area 
{ 
    [Key] 
    [Column("AREA_CODE")] 
    public int AreCode { get; set; } 
    [Column("AREA_NAME")] 
    public string AreName { get; set; } 
} 

更新2

語境

public WsContext(string sConnectionString) 
     : base(sConnectionString) 
    { 
    } 

    public DbSet<Area> Areas { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
    } 

更新3

CREATE TABLE CELG.EPW_AREAS 
(
    AREA_CODE NUMBER       NOT NULL, 
    AREA_NAME VARCHAR2(30 BYTE) 
) 
TABLESPACE TBS_CELG_DATA 
PCTUSED 0 
PCTFREE 10 
INITRANS 1 
MAXTRANS 255 
STORAGE (
     INITIAL   64K 
     NEXT    1M 
     MINEXTENTS  1 
     MAXEXTENTS  UNLIMITED 
     PCTINCREASE  0 
     BUFFER_POOL  DEFAULT 
     ) 
LOGGING 
NOCOMPRESS 
NOCACHE 
NOPARALLEL 
MONITORING; 
+0

最可能的問題是您的映射是錯誤的。如果你需要進一步的幫助,你將不得不提供映射代碼。 – Igor

+0

你可以發佈你的上下文類嗎? – Isma

+0

是否確定該列接受空值並且不是「非空」列? –

回答

4

可能會出現此錯誤,因爲Entity Framework忽略了您爲AreaCode屬性設置的值,因爲它設置爲密鑰,而且按照慣例EF預計此密鑰將由您的數據庫系統自動生成。

你可以嘗試如下禁用它:

[Table("EPW_AREAS", Schema="CELG")] 
public class Area 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    [Column("AREA_CODE")] 
    public int AreCode { get; set; } 
    [Column("AREA_NAME")] 
    public string AreName { get; set; } 
} 

確保您不嘗試添加同一區號比不過一次。

+0

打我吧:) –

+0

謝謝男人!!!!!我真的很喜歡實體框架,而那些容易的事情有時並不那麼容易發現! – ruynunes

+0

沒問題,我們都在那裏;-) – Isma

0

請閱讀this article

它提到了如何啓用和禁用自動生成的主鍵。