2017-10-11 97 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

它提到了如何启用和禁用自动生成的主键。

相关问题