2012-04-03 73 views
0

我們使用EF 4.0與代碼優先的方法。我已經使用屬性StringLength定義了屬性長度的約束。我的印象是,使用SaveChanges for Context跟蹤比指定約束更長的數據的實體會拋出驗證異常。 但不幸的是,這不會發生。如果我在SaveChanges之前執行GetValidationErrors(),則會看到預期的錯誤。有人可以澄清這些東西應該如何工作嗎?如何驗證保存應該工作

更新:找到問題所在。爲了追蹤受SaveChanges影響的實體,我們使用DBContext的底層ObjectContext(通過IObjectContextAdapter)。 SaveChanges已被調用ObjectContext,當我切換到DBContext.SaveChanges問題已解決。

+0

你在某處設置了'dbContext.Configuration.ValidateOnSaveEnabled = false'嗎? BTW:EF 4.0沒有代碼優先。你可以檢查你使用的版本,它必須在4.1到4.3(或EF 5.0 beta)之間? – Slauma 2012-04-03 18:17:16

+0

是的我絕對相信ValidateOnSaveEnabled是真實的。我們使用System.Data.Entity.dll與運行時版本v4.0.30319(版本4.0.0.0),它包括代碼第一和GetValidationErrors和ValidateOnSaveEnabled。 – 2012-04-04 07:08:20

+0

你也應該在你的項目中引用一個「EntityFramework.dll」。 「System.Data.Entity.dll」不包括代碼優先。 Code-First是獨立程序集「EntityFramework.dll」(它也包含*名稱空間*「System.Data.Entity」的擴展)的擴展。重要的是知道「EntityFramework.dll」的版本。 – Slauma 2012-04-04 09:47:41

回答

1

發現問題在哪裏。爲了追蹤受SaveChanges影響的實體,我們使用DBContext的底層ObjectContext(通過IObjectContextAdapter)。 SaveChanges已被調用ObjectContext,當我切換到DBContext.SaveChanges問題已解決。