繁体   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