簡體   English   中英

沒有該類型的DbSet時如何刪除實體?

[英]How can I delete an entity when I have no DbSet for that type?

我正在使用提供的DbContext ,但是無法更改。

為簡潔起見,上下文包含兩種類型

public class LogPost {
    public int ID { get; set; }
    public string Comment { get; set; }
    public virtual ICollection<LogReply> Replies { get; set; }

    public LogPost() {
        Replies = new List<LogReply>();
    }
}

public class LogReply {
    public int ID { get; set; }
    public string Comment { get; set; }
}

沒有DbSet<LogReply>可以使用,只有DbSet<LogPost> 如果我嘗試從post.Replies集合中刪除答復,則會引發有關外鍵屬性不為空(如預期的那樣)的異常。

如何刪除回復?

我知道您無法更改現有的DbContext實現,但是為DbSet<T>創建DbSet<T>DbContext是公共的(請參見此處 )。

因此,您可以嘗試以下操作:

using(var db = new Context())
{
    var post = db.LogPosts.First(p => p.ID == postID);
    var reply = post.Replies.First(r => r.ID == replyID);

    var logReplies = db.Set<LogReply>();
    logReplies.Remove(reply);

    db.SaveChanges();
}

我正在使用的解決方案是獲取實體的DbEntityEntry並將其手動標記為已刪除。

using (var db = new Context()) {
    var post = db.LogPosts.First(p => p.ID == postID);
    var reply = post.Replies.First(r => r.ID == replyID);
    db.Entry(reply).State = System.Data.Entity.EntityState.Deleted;
    db.SaveChanges();
}

暫無
暫無

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

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