我想使用 EF 5 模型验证来避免数据库中的重复值,所以我使用这样的模型类:
[Table("MeasureUnits")]
public class MeasureUnit : IValidatableObject
{
public int MeasureUnitId { get; set; }
public string Symbol { get; set; }
public string Name { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
using (MeasureUnitRepository rep = new MeasureUnitRepository())
{
MeasureUnit measureUnit = rep.FindDuplicateBySymbol(this);
if (measureUnit != null)
yield return new ValidationResult(
"There is another unit with this symbol, you can't duplicate it",
new[] { "Symbol" });
}
}
存储库类创建 DbContext,实现 IDisposable,具有查找重复项的逻辑,并且一切都按预期工作。
但是,使用调试器时,我意识到每次插入或更新都会执行两次验证,因此存储库(和 DbContext)也被实例化和处理两次。
除此之外,控制器中还有另一个 DbContext ,但除了在模型的构造函数中包含 DbContext 之外,只是找不到在模型类中使用它的方法,但我觉得这不是正确的解决方案。
是否有更好的“正确”方法来实现此验证?
提前致谢。