對於使用代碼第一次EF 5測試版的應用程序,我有:EF可以自動刪除父母未被刪除的孤兒數據嗎?
public class ParentObject
{
public int Id {get; set;}
public virtual List<ChildObject> ChildObjects {get; set;}
//Other members
}
和
public class ChildObject
{
public int Id {get; set;}
public int ParentObjectId {get; set;}
//Other members
}
相關的CRUD操作都是由庫,必要時進行。
在
OnModelCreating(DbModelBuilder modelBuilder)
我已經建立起來:
modelBuilder.Entity<ParentObject>().HasMany(p => p.ChildObjects)
.WithOptional()
.HasForeignKey(c => c.ParentObjectId)
.WillCascadeOnDelete();
因此,如果一個ParentObject
被刪除,它ChildObjects也有同感。
但是,如果我運行:
parentObject.ChildObjects.Clear();
_parentObjectRepository.SaveChanges(); //this repository uses the context
我得到異常:
操作失敗:關係不能被改變,因爲一個或多個外鍵的屬性是不可-nullable。當對關係進行更改時,相關的外鍵屬性將設置爲空值。如果外鍵不支持空值,則必須定義新的關係,必須爲外鍵屬性指定另一個非空值,或者必須刪除不相關的對象。
這是有道理的,因爲實體的定義包括被破壞的外鍵約束。
我可以配置實體「清除自己」孤立或必須手動從上下文中刪除這些ChildObject
(在這種情況下使用ChildObjectRepository)。
幸運的是,EF隊[知道這個(http://blog.oneunicorn.com/2012/06/02/deleting-orphans-with-entity-framework/),並很可能會拿出一個內置的解決方案,不需要修改內部結構 – PinnyM