簡體   English   中英

使用實體框架在數據庫中插入數據

[英]Inserting data inside Database using Entity Framework

我有一個通用存儲庫,這里有一種將數據保存到數據庫中的方法。 知道我要更換舊系統,因此我遇到了這種情況:

例如,當我必須保存一個Area時,我需要根據數據庫中插入的最后一個值來插入字段的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();
}

執行SaveAll方法后,錯誤會上升。

{“ ORA-01400:不能在(\\“ CELG \\”。\\“ EPW_AREAS \\”。\\“ AREA_CODE \\”)\\ nORA-06512:第4行中插入null”}

知道我要強制使用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;

由於Entity Framework忽略了您為AreaCode屬性設置的值,因為它被設置為Key,並且按照慣例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; }
}

但是,請確保不要嘗試多次添加相同的區號。

請閱讀這篇文章

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

暫無
暫無

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

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