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