entity framework中唯一字段的选项 – dbSet的导航属性?

经过大量研究后,似乎Entity Framework 4.4不支持Unique约束。 是的,它可以并且应该在数据库中完成,但我更喜欢它在模型validation中发生,因此对用户的警告更漂亮。

对于程序员来说,能够使用[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]属性并命中数据库以检查唯一性。 缺点:此validation仅在我们调用SaveChanges()时发生,理想情况下它可以更早发生(例如,当UI控件validation时)。

2)为UserGroup模型提供一个延迟加载的导航属性给AllUserGroups:

 public virtual ICollection AllUserGroups { get; set; } 

然后编程UniqueAttribute {}来扫描此属性并检查值等。

问题 :如何配置Entity Framework(代码优先)将所有记录加载到此“导航属性”中? 它似乎只想要一个带有外键等的导航属性,而我只想要它们。

3)在UI中手动编写此validation – 可怕且绝对的最后手段。

问题 :是否有更好的选项可以通过模型级别的validation来强制执行唯一约束?

问候,-Brendan

我发现这个,似乎是你正在寻找的那个:

UniqueAttribute,用于根据数据库中的其他行validation唯一字段(inheritanceDataAnnotations.ValidationAttribute)