外键验证错误

时间:2012-11-25 19:22:41

标签: entity-framework-5

当我有这个简单的模型时:

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.

从技术上讲,这是正确的,因为该属性被标记为必需,并且因为从数据库中提取Language属性为null(没有延迟或急切加载)。

但是我该如何改变这种行为?

  • 我不想完全禁用验证
  • 我不想懒惰/急切加载字段
  • 我不想从模型
  • 中删除Required标记

还有哪些其他选择?

1 个答案:

答案 0 :(得分:2)

您可以通过将原始FK字段(可能是LanguageId)添加到User类来防止这种情况发生。这在实体框架中并不罕见。在更多情况下,获取或设置原始属性可以节省工作量或不必要的(延迟)加载。