由於實體框架的狀態,在這裏我們去的代碼先刪除孩子的......實體框架代碼首先,通過「先典」更新父
public class BaseModel
{
[Key]
public Guid Id { get; set; }
public DateTime DateCreated { get; set; }
public DateTime DateChanged { get; set; }
public BaseModel()
{
this.Id = Guid.NewGuid();
this.DateCreated = DateTime.Now;
this.DateChanged = DateTime.Now;
}
}
public class Association: BaseModel
{
public string Name { get; set; }
public string Type { get; set; }
public virtual List<Rule> Rules { get; set; }
public Association()
: base()
{
}
}
public class Rule: BaseModel
{
[ForeignKey("Association")]
public Guid AssociationId { get; set; }
//[Required]
public virtual Association Association { get; set; }
//[Required]
public string Name { get; set; }
public string Expression { get; set; }
public virtual List<Action> Actions { get; set; }
public Rule()
: base()
{
}
}
public class Action: BaseModel
{
public string Name { get; set; }
public string ActionType { get; set; }
[ForeignKey("Rule")]
public Guid RuleId { get; set; }
public virtual Rule Rule { get; set; }
public int Order { get; set; }
public Action()
: base()
{
}
}
因此,這些都是我的四個模型類,使用實體框架代碼第一。 每個都從基類繼承,所以它們都有一個Id Guid作爲主鍵。
一個關聯有一個規則列表。 (規則具有FK給協會) 規則與動作列表一樣。 (動作有FK來規則)
我想要做的只是改變並保存最向上的class = Association。 例如刪除規則時,我想這個代碼工作:
public ActionResult DeleteRule(Guid assId, Guid ruleId)
{
Association ass = this.DataContext.Associations.FirstOrDefault(a => a.Id == assId);
ass.Rules.RemoveAll(r => r.Id == ruleId);
this.DataContext.SaveChanges();
return RedirectToAction("Index");
}
在這給我這個錯誤context.savechanges: 「操作失敗:關係不能被改變,因爲一個或更多的外鍵屬性是不可空的。當對關係進行更改時,相關的外鍵屬性將設置爲空值。如果外鍵不支持空值,則必須定義新的關係,必須爲外鍵屬性指定另一個非空值,或者必須刪除不相關的對象。
刪除操作時也會發生此錯誤。
有沒有辦法改變最上層(關聯)對象,只有改變這個關聯的東西。 我不想說context.Rules.remove(...)或context.actions.remove(...)
這裏的源:http://server.thomasgielissen.be/files/mvctesting.zip 你需要VS2012,所有的NuGet包包含在ZIP和你應該能夠建立並運行項目。
在此先感謝您的反饋!
格爾茨, 托馬斯
您需要重新格式化這個問題。簡化您的問題描述並在帖子中包含最少的相關代碼。就目前而言,你很難獲得幫助。 – Michal
問題已更新!,希望我現在可以獲得幫助:) –