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异常The Language field is required.

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

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

  • 我不想完全禁用验证
  • 我不想懒惰/急切地加载该字段
  • 我不想从模型中删除必需标签

还有哪些其他选择?

4

1 回答 1

2

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

于 2012-11-25T20:51:56.287 回答