我使用的是已提供的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
集合中删除回复,则会抛出异常的外键属性(如预期的那样)。
如何删除回复?
答案 0 :(得分:4)
我知道您无法更改现有的DbContext
实施,但为DbSet<T>
创建DbContext
的方法是公开的(请参阅here)。
所以你可以尝试以下方法:
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();
}
答案 1 :(得分:0)
我使用的解决方案是获取实体的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();
}