使用实体框架从oracle数据库中删除记录

时间:2019-02-25 23:15:39

标签: c# oracle entity-framework

我想使用实体框架删除一条记录。 DB是Oracle。

方法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();
}
  

错误:System.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 :(得分:0)

您为什么不打电话给.Remove

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

,但是如果您的数据类型不匹配,这可能仍然行不通。如果可以共享表 DDL脚本类定义 OnModelCreating

,可能会更好

答案 1 :(得分:0)

您可以尝试将实体状态更改为已删除:

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();
}