簡體   English   中英

使用實體框架從oracle數據庫中刪除記錄

[英]deleting record from oracle database using 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語句出現問題。

方法二:

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中找不到該對象

為什么不打電話給我呢? .Remove

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

但是如果您的數據類型不匹配,則可能仍然無法使用。 如果可以共享表DDL腳本類定義OnModelCreating可能更好

您可以嘗試將實體狀態更改為已刪除:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM