我對EF沒有太多瞭解,但必須做一些錯誤修正。出現一個錯誤,如下所示:實體框架:使用篩選的子記錄獲取父記錄
- 獲取父記錄使用
ObjectContext
- 改變一些財產
- 保存更改
的問題是Get parent record
更具體(EF LINQ查詢)只獲得父母的活躍孩子。
這是當前黑客:
var data =
(from q in Context.Questions.Include("Status").Include("Category")
where q.Id == id
select q).SingleOrDefault();
var atts = Context.Answers.Where(a => a.qId == id && a.active); // 1
data.Answers.Clear(); // 2
foreach (var att in atts)
{
data.Answers.Add(att); // 3
}
會發生什麼:
- 從數據庫
- 因爲延遲加載的獲取活動子記錄,所有附件都來自取出數據庫。然後集合被立即清除。在所有活動記錄(EF跟蹤標記這些記錄爲「刪除」?)
- 循環並且再次將它們添加到集合(EF跟蹤標記這些記錄爲「插入」?)
我更新時出現以下異常:The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.
我假設發生了一個非常普遍的錯誤,因爲EF對清除集合感到困惑,然後又添加了一些相同的記錄。
我的問題:我只得到了積極的子記錄,並讓他們在一個「不變」狀態,以便在任何時候,EF能夠決定刪除並重新插入我的記錄怎麼辦。顯然,我也不想在更新時丟失非活動記錄。
沒有答案(是嗎?):在SO和谷歌經常被發現,但不能得到這個工作:
Context.ContextOptions.LazyLoadingEnabled = false;
var data =
(from q in Context.Questions.Include("Status").Include("Category")
where q.qId == id
select new
{
Question = q,
Answers = q.Answer.Where(a => a.active)
}).ToArray().Select(q => q.Question).FirstOrDefault();
return data; // Does not contain the answers... :(
不幸的是'Entry'是在'DbContext'中定義的,它是從項目中使用的ObjectContext派生的。 – Laoujin 2013-02-28 14:41:05
嘗試將您的ObjectContext轉換爲DbContext。參見[objectcontext-does-not-contain-a-definition-for-entry](http://stackoverflow.com/questions/11032683/objectcontext-does-not-contain-a-definition-for-entry-and-no -extension-metho) – 2013-02-28 14:44:01
你想使用Include()和Load()嗎?我想如果你使用Load(),那麼你不需要Include()。也許我錯了。 – 2013-02-28 14:49:58