假設我有以下模型。使用c#mvc context更新EF中的多個外鍵數據模型
public class modelA
{
[Key]
public int ID {get; set;}
public string Name {get; set;}
}
public class modelB
{
[key]
public int ID {get; set;}
public string Name {get; set;}
public modelA modelAID {get; set;}
}
public class modelC
{
[key]
public int ID {get; set;}
public string Name {get; set;}
public modelA modelAID {get; set;}
public modelB modelBID {get; set;}
}
現在我有插入modelC的控制器動作。
public ActionResult addModelC()
{
modelA dbModelA = db.modelAs.FirstOrDefault();
modelB dbModelB = db.modelBs.FirstOrDefault();
modelC newModelC = new modelC();
newModelC.Name = "New Model C";
newModelC.modelAID = dbModelA;
newModelC.modelBID = dbModelB;
db.modelCs.Add(newModelC);
db.SaveChanges(); //DbEntityValidation error on dbModelB.modelAID empty because its not included when db.modelBs query was called
}
如果我不以db.modelBs EF渴望負荷modelAID將嘗試創建的SaveChanges上新的記錄()。如何阻止此?
如何添加modelC
而不包括(急切加載)modelA和modelB。我只需要添加外鍵關係。在SaveChanges中,它也嘗試更新modelA和modelB,但我不想更新這些。我知道EF需要知道一切,但由於大量記錄的急切加載可能會引發內存問題。
db.modelCs.include(i=>i.modelAID).include(i=>i.modelBID).ToList();
如果我不需要內連接modelAID modelBID。並只顯示modelC。
同樣在某些情況下,如果我將modelC返回爲JSON對象,則表示找到了循環引用,因爲它在modelB中重複modelAID一次,modelC中出現一次。我希望我能說清楚。
注:使用代碼第一種方法。
加載ModelA通常使用關鍵字'virtual'創建外鍵。在你的例子中,我懷疑你必須使用:'public virtual modelA modelAID {get;組; }' – peval27
如果我使用虛擬它將啓動延遲加載。我想要的是,不加載相關對象。 –