使用asp.net+EF5.0練習的時候,遇到這樣一個問題:
對一個或多個實體的驗證失敗。有關詳細信息,請參見“EntityValidationErrors”屬性
但是感到很疑惑,去百度,說是關閉EF驗證,即可
修改:
SaveChanges前先關閉驗證實體有效性(ValidateOnSaveEnabled)這個開關
可以在 Controller層這樣關閉
1
2
3
|
db.Configuration.ValidateOnSaveEnabled =
false
;
int
count = db.SaveChanges();
db.Configuration.ValidateOnSaveEnabled =
true
;
|
或者在 DAL層,對整個系統關閉
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
/// <summary>
/// 創建 EF上下文 對象,在線程中共享 一個 上下文對象
/// </summary>
/// <returns></returns>
public
DbContext GetDbContext()
{
//從當前線程中 獲取 EF上下文對象
DbContext dbContext = CallContext.GetData(
typeof
(DBContextFactory).Name)
as
DbContext;
if
(dbContext ==
null
)
{
dbContext =
new
IZhanShiEntities();
dbContext.Configuration.ValidateOnSaveEnabled =
false
;
//將新創建的 ef上下文對象 存入線程
CallContext.SetData(
typeof
(DBContextFactory).Name, dbContext);
}
return
dbContext;
}
|
關閉之后,不報這個錯了,轉而報另外要給錯誤:
SqlException (0x80131904): 將截斷字符串或二進制數據。 語句已終止。
這才是問題所在 可以說 是你在操作數據庫的時候,有字段超過了數據庫里面 你字段的限制大小
查看代碼,果然有字段太長了。
問題原因:
1. 非空列未插入值錯誤
2. 多個表間外鍵列長度不一樣
3. ef上下文對象db為空
4. ef上下文設置屬性為 db.Configuration.ValidateOnSaveEnabled = false;
5. 內容長度超過列最大長度
我的錯誤原因是沒有給Position賦值,它的值是null,所以報錯。(Position是Employees的主鍵表)