2017-10-11 2 views
0

J'ai un référentiel générique où j'ai une méthode pour enregistrer des données dans la base de données. Sachant que je change un ancien système, je suis confronté à cette situation:Insérer des données dans la base de données en utilisant Entity Framework

Lorsque je dois enregistrer une zone, par exemple, j'ai besoin d'insérer l'identifiant du champ en fonction de la dernière valeur insérée à l'intérieur par la base de données , mais pour une raison quelconque lorsque j'essaie de persister, une erreur indiquant que je ne peux pas insérer de valeurs nulles dans l'ID de la table apparaît.

J'ai essayé de le faire:

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

La méthode de sauvegarde est:

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

Et la sauver toute méthode est

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

Après l'exécution de la méthode SaveAll l'erreur augmente .

{ "ORA-01400: est pas possible d'insérer null (\" CELG \ EPW_AREAS \ AREA_CODE de \ » \. "" \. "") \ NORA-06512: à la ligne 4" }

Sachant que j'essaie de forcer la valeur AREA_CODE, pourquoi framework d'entité ne l'ajoute pas et considère la valeur comme nulle?

Existe-t-il un moyen de le forcer?

Est-ce que quelqu'un peut vous aider?

Merci dans le conseil.

Mise à jour:

classe Entité:

[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; } 
} 

Mise à jour 2

Contexte

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

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

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

Mise à jour 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

Le problème le plus probable est que votre mappage est incorrect. Si vous voulez plus d'aide, vous devrez fournir le code de mappage. – Igor

+0

Pouvez-vous poster votre classe de contexte? – Isma

+0

êtes-vous sûr que la colonne accepte les valeurs nulles et ce n'est pas une colonne "non nulle"? –

Répondre

4

L'erreur peut se produire car Entity Framework ignore la valeur que vous avez définie pour votre propriété AreaCode car elle est configurée en tant que clé et, par convention, EF s'attend à ce que cette clé soit générée automatiquement par votre système DB.

Vous pouvez essayer de le désactiver comme suit:

[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; } 
} 

Assurez-vous de ne pas essayer d'ajouter le même indicatif régional plus d'une fois cependant.

+0

Battre moi :) :) –

+0

Thanks man !!!!! Je suis vraiment un noob dans le cadre d'entité et ces choses faciles parfois ne sont pas si faciles à découvrir! – ruynunes

+0

Pas de problème, nous y sommes tous allés ;-) – Isma

0

Veuillez lire this article.

Il mentionne comment activer et désactiver la clé primaire générée automatiquement.