我正在構建ASP.NET MVC 3的一個論壇項目,它使用最新版本的實體框架在.NET 4上運行。實體框架4.1代碼優先,所需的延遲加載引用在保存時爲空
我平時的設計論壇,與分類一局,並與論壇,論壇主題與主題,並與文章等
分類簡化爲:
public class Category {
[Required]
public virtual Board Board { get; set; }
}
public class Forum {
[Required]
public virtual Category Category { get; set; }
}
public class Topic {
[Required]
public virtual Forum Forum { get; set; }
}
public class Post {
[Required]
public virtual Topic Topic { get; set; }
}
當創建一個新的崗位該主題被通知,並且當話題被改變時,論壇被通知。
所以,再次簡化:
public class Forum {
public void TopicChanged(Topic topic) {
// Do stuff
}
}
public class Topic {
public void PostAdded(Post post) {
// Do stuff
this.Forum.TopicChanged(this);
}
}
因此,創建一個新的帖子(和它提交到數據庫)後,我打電話PostAdded父話題。現在這是奇怪的地方!
當我對我的存儲庫提交更改時,出現驗證錯誤,需要論壇上的類別。
如果我查看數據庫,論壇會引用父類別。如果我停止代碼並查看Forum對象,它有一個Category實例。因此,這看起來像延遲加載的問題,特別是因爲如果我加入這一行:
var cat = this.Category
在論壇類的TopicChanged方法的底部,不再有任何錯誤。
我在這裏做了些什麼完全錯誤的事情,我遇到了一個臨界問題,或者發生了什麼?我想EF會看到引用是一個懶加載的引用,如果它沒有改變,沒有理由爲什麼這會失敗保存?
感謝, 斯蒂恩
EF禁用延遲加載時,它驗證。我記得[拉迪斯拉夫](http://stackoverflow.com/users/413501/ladislav-mrnka)已經給出了詳細的答案,但我找不到帖子。 – Eranga
答案在這裏:http://stackoverflow.com/questions/7305144/lazy-deferred-loading-of-links-not-on-time –
謝謝。我可以理解爲什麼,但這使我很難做到自己想做的事!開溜! –