удаление записи из базы данных оракула с использованием структуры объекта - PullRequest
0 голосов
/ 26 февраля 2019

Я хотел бы удалить запись, используя структуру объекта.БД является оракулом.

Подход 1:

public void DeleteTask(Guid taskId, string userId)
{
    var task = _context.TWFITSKs.FirstOrDefault(x => x.ID == taskId.ToString());//<---Error line
    if (task == null) return;
    _context.TWFITSKs.Attach(task);
    _context.TWFITSKs.Remove(task);
    _context.SaveChanges();
}

Ошибка: ORA-00932: несовместимые типы данных: ожидается - получен CLOB

TWFITSKсодержит столбец с типом данных CLOB, но не уверен, почему это вызывает проблему в этом операторе select.

Подход 2:

public void DeleteTask(Guid taskId, string userId)
{
    var task = new TWFITSK { ID = taskId.ToString() };
    _context.TWFITSKs.Attach(task); // <--- Error line
    _context.TWFITSKs.Remove(task);
    _context.SaveChanges();
}

Ошибка: система.InvalidOperationException: «Присоединение объекта типа« XXXXX.TWFITSK »завершилось неудачно, поскольку другой объект того же типа уже имеет то же значение первичного ключа.Это может произойти при использовании метода «Присоединить» или установке состояния объекта на «Неизменено» или «Изменено», если какие-либо объекты в графе имеют конфликтующие значения ключей.Это может быть потому, что некоторые объекты являются новыми и еще не получили сгенерированные базой данных значения ключей.В этом случае используйте метод «Добавить» или «Добавленный» объект сущности для отслеживания графика, а затем установите для состояния не новых объектов «Неизмененный» или «Измененный», в зависимости от ситуации. '

Подход 3:

public void DeleteTask(Guid taskId, string userId)
{
    var task = new TWFITSK { ID = taskId.ToString() };
    _context.TWFITSKs.Remove(task); //<--- Error line
    _context.SaveChanges();
}

Ошибка: невозможно удалить объект, поскольку он не был найден в ObjectStateManager

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Вы можете попробовать изменить состояние объекта на удаленное:

var task = new TWFITSK { ID = taskId.ToString() };
_context.Entry(task).State = EntityState.Deleted;
_context.SaveChanges();

Обновление : попробуйте передать объект в ваш метод, так как он уже связан с контекстом.Это может работать:

public void DeleteTask(TWFITSKs task)
{
    if (task == null) return;

    _context.TWFITSKs.Remove(task);
    _context.SaveChanges();
}
0 голосов
/ 26 февраля 2019

Почему бы вам просто не позвонить .Remove

var task = new TWFITSK { ID = taskId.ToString() };
_context.TWFITSKs.Entry(task).State = EntityState.Deleted;
_context.SaveChanges();

, но это все равно может не сработать, если у вас несоответствие типа данных.Возможно, будет лучше, если вы сможете совместно использовать таблицу DDL-скрипт , определение класса и OnModelCreating

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...