EF

2014-10-10 15 views
5

索引數據註釋的錯誤消息嗨我正在使用實體框架6.1.1,它支持索引數據註釋功能。 我有我的實體類定義爲字段:EF

[Index("scoreIndex", IsUnique=true)] 
    public int score{ get; set; } 

這是工作的罰款。但是,我試圖找出當分數不唯一時如何顯示消息。現在它只是拋出一個異常。我嘗試了以下方法

[Index("scoreIndex", IsUnique=true, ErrorMessage="Score must be unique")] 

但是它沒有包含此索引註釋類的ErrorMessage的定義。 你能告訴我如何處理異常消息,以便它能夠優雅地處理它嗎?

+0

Index屬性只是告訴EF在遷移運行時創建一個索引,它不會導致EF強制執行索引。你將不得不在你的代碼中處理異常。或者,您可以編寫一個自定義數據註釋,實際驗證該屬性的唯一性。 – 2014-10-10 18:42:40

回答

2

IndexAttribute不是驗證屬性,這就是爲什麼它沒有ErrorMessage屬性,它也沒有IsValid()方法用於根據一定範圍的有效值對其進行驗證。

這意味着它的設計不像典型的Validation屬性(Required,MaxLength等)那樣被驗證。 IsUnique屬性僅在表創建期間用於創建唯一索引。

如果你想使用屬性,那麼你應該創建一個自定義屬性來檢查索引的唯一性。該索引當然會繼承ValidationAttribute類,並且必須在內部訪問EF DbContext以檢查屬性驗證代碼中的唯一性。

如果你不喜歡這種數據註解的方法,並且它太複雜,那麼你可以在一個try-catch塊中處理由SaveChanges()方法拋出的DbUpdateException,解碼錯誤信息並返回一些友好的內容你的觀點模型。

try 
{ 
    using (var ac = new ApplicationDbContext()) 
    { 
     // Add non-unique data 

     ac.SaveChanges(); 
    } 
} 
catch (DbUpdateException ex) 
{ 
    // Handle index error 
}