3

经过大量研究,似乎 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 中手动编码此验证 - 糟糕且绝对是最后的手段。

问题:有没有更好的选择来通过模型级别的验证来强制执行唯一约束?

问候,-布伦丹

4

1 回答 1

3

我发现了这个,似乎是你要找的那个:

根据数据库中的其他行验证唯一字段的唯一属性(继承 DataAnnotations.ValidationAttribute)

于 2013-04-14T13:52:56.383 回答