我嘗試通過從父子集合中洗掉子物體來洗掉子物體,但是在這樣做之后ChangeTracker標記子物體,Modified因此該物體不會從資料庫中洗掉(而且即使在之后它仍會繼續被“修改” SaveChanges)。這很奇怪,因為當我使用相同的技巧來添加孩子時,它作業正常。
我不使用洗掉/添加物體DbContext,因為我想要丟棄更改邏輯。當我開始修改物件時,我會記住它的狀態,丟棄更改會將屬性和子集合恢復為記住的狀態,應用更改會更新記住的狀態。
那么為什么添加新子項有效,但洗掉子項無效,為什么洗掉的條目在ChangeTracker?
class Parent
{
public int Id { get; set; }
public ICollection<Child> Children { get; set; }
}
class Child
{
public int Id { get; set; }
public int ParentId { get; set; }
public Parent Parent { get; set; }
}
class MyContext : DbContext
{
...
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Child>()
.HasRequired<Parent>(c => c.Parent)
.WithMany(p => p.Children)
.HasForeignKey(c => c.ParentId);
}
}
class MyClass
{
private MyContext context;
public Parent Parent { get; set; }
...
public void DeleteChild(Child child)
{
Parent.Children.Remove(child);// doesn't work
context.SaveChanges();
}
public void AddChild(Child child)
{
Parent.Children.Add(child);// works
context.SaveChanges();
}
}
uj5u.com熱心網友回復:
我在那里找到了答案
您沒有使用 remove 陳述句洗掉物件。相反,您正在嘗試更改記錄并使其成為孤立記錄(通過將外鍵設定為空)。資料庫對該列具有非空約束,并阻止您這樣做。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/517082.html
標籤:C#实体框架
下一篇:無法定位主鍵,因為它不兼容
