2017-10-11 18 views
0

データベースにデータを保存する方法がある汎用リポジトリがあります。Entity Frameworkを使用してデータベース内にデータを挿入する

たとえば、Areaを保存する必要がある場合、データベースの中に最後に挿入された値に基づいてフィールドのIDを挿入する必要がありますしかし、何らかの理由でこれを保持しようとすると、テーブルのIDにnull値を挿入できないというエラーが表示されます。

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

保存する方法は次のとおりです:

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

とエラーが上昇SAVEALLメソッドを実行した後、すべての方法は

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

で保存

は、私はこれを実行しようとしました。

{ "ORA-01400:にヌルを挿入することは不可能である(\"「\ "" \ "CELG \ EPW_AREAS \ AREA_CODEの\")\ノラ-06512: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

カラムがnull値を受け入れ、それが "not null"カラムでないことを確かめていますか? –

答えて

4

このエラーは、Entity FrameworkがAreaCodeプロパティに設定した値をキーとして設定されているため、EFがこのキーがDBシステムによって自動的に生成されると想定しているために発生することがあります。

あなたは次のようにそれを無効にしてみてください:

[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をお読みください。

自動生成された主キーを有効または無効にする方法について説明します。

関連する問題