经过大量研究,似乎 Entity Framework 4.4 不支持唯一约束。是的,它可以并且应该在数据库中完成,但我更希望它发生在模型验证中,因此对用户的警告更漂亮。
对于程序员来说,能够用 [Unique] 属性装饰属性将是理想的,并且它应该以某种方式成为可能,例如:
public class UserGroup
{
public int UserGroupID { get; set; }
[Required]
[Unique]
public string Name { get; set; }
[Required]
public string Description { get; set; }
}
我正在考虑的选项:
1) 让存储库在 SaveChanges() 处做一些额外的工作,扫描已修改实体上的 [Unique] 属性并访问数据库以检查唯一性。缺点:此验证仅在我们调用 SaveChanges() 时发生,理想情况下它可以更早发生(例如,当 UI 控件验证时)。
2) 给 UserGroup 模型一个延迟加载的导航属性给 AllUserGroups:
public virtual ICollection<UserGroup> AllUserGroups { get; set; }
然后编程 UniqueAttribute{} 来扫描这个属性并检查值等。
问题:如何配置实体框架(代码优先)以将所有记录加载到此“导航属性”中?它似乎只想要一个带有外键等的导航属性,而我只想要它们。
3) 在 UI 中手动编码此验证 - 糟糕且绝对是最后的手段。
问题:有没有更好的选择来通过模型级别的验证来强制执行唯一约束?
问候,-布伦丹