2012-11-25 114 views
1

當我有這個簡單的模型:驗證錯誤與外鍵

public class User 
{ 
    // Primary key 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid UserId { get; set; } 

    [Required] 
    public Int32 FailedPasswordAttemptCount { get; set; } 

    [Required] 
    public Language Language { get; set; } 
} 
public class Language 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid LanguageId { get; set; } 

    [MaxLength(30)] 
    public String LocaleName { get; set; } 
} 

而且我這樣做代碼:

var user = context.Users.Single(u => u.UserId == userId); 
user.FailedPasswordAttemptCount++; 
context.SaveChanges(); 

它會拋出一個DbEntityValidationException expception The Language field is required.

從技術上講,這是真實的,因爲屬性被標記爲需要,並且因爲從數據庫中提取時(012,)屬性爲空(無延遲或加載)。

但是我怎麼改變這種行爲?

  • 我不想禁用驗證完全
  • 我不想懶惰/貪婪加載領域
  • 我不想從模型中取出所需的變量

什麼其他選擇了嗎?

回答

2

您可以通過將原始FK字段(可能爲LanguageId)添加到User類中來防止此問題。這在實體框架中並不罕見。有更多的場合獲取或設置原始屬性保存工作或不必要(懶惰)加載。

+0

謝謝我爲用戶類添加了一個'Guid''LanguageId',我沒有做出必要的工作。 – YesMan85