当我有这个简单的模型时:
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(没有延迟或急切加载)。
但是我该如何改变这种行为?
还有哪些其他选择?
答案 0 :(得分:2)
您可以通过将原始FK字段(可能是LanguageId
)添加到User
类来防止这种情况发生。这在实体框架中并不罕见。在更多情况下,获取或设置原始属性可以节省工作量或不必要的(延迟)加载。