Фреймворк Entity всегда вставляет нулевой идентификатор - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь использовать Entity Framework для сохранения изменений в БД.

  using (var context = new Entities())
  {
     USERS user = new USERS() { NAME = name, PASSWORD = password };
     context.USERS.Add(user);
     context.SaveChanges();
  }

Всегда выдает исключение, поскольку вставляет 0 в качестве первичного ключа:

ORA-01400: невозможно вставить NULL в (\ "SYSTEM \". \ "USERS \". \ "ID \")

ORA-06512: в строке 4

Есть идеи, почему это происходит?

EDIT:

Класс USERS имеет следующие свойства:

    public int ID { get; set; }
    public string NAME { get; set; }
    public string PASSWORD { get; set; }

Я установил StoreGeneratedPattern на Identity, и он по-прежнему вставляет идентификатор как 0

Ответы [ 3 ]

0 голосов
/ 09 августа 2018

Мне удалось решить эту проблему, предоставив все системные привилегии (кроме SYSDBA и SYSOPER) строке подключения. Пользователь:

Edit the user's privileges using Oracle SQL Developer

Полагаю, вы, вероятно, упустили разрешение на использование последовательности, но я не уверен, какой именно.

0 голосов
/ 14 августа 2018

Вам необходимо создать последовательность:

CREATE SEQUENCE "DatabaseName".SEQ_user_ID  MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH 18000 CACHE 2 NOORDER  NOCYCLE  NOKEEP  NOSCALE  GLOBAL ;

И триггер:

CREATE OR REPLACE TRIGGER "DatabaseName".TRI_SEQ_user_ID
               BEFORE INSERT ON version
               REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW
BEGIN
  SELECT ID.nextval INTO :NEW.ID FROM DUAL;
END;

с помощью этих двух функций вы можете добавлять новые записи в базу данных без указания идентификатора

0 голосов
/ 03 июля 2018

Пытался сгенерировать модель из БД как Code-Frist, все еще вставляя 0 как ID. Вот конфигурация первичного ключа:

 modelBuilder.Entity<USERS>()
                .HasKey<int>(e => e.ID);

и свойства объекта:

    [Key]
    public int ID { get; set; }

    [Required]
    [StringLength(50)]
    public string NAME { get; set; }

    [Required]
    [StringLength(50)]
    public string PASSWORD { get; set; }
...