我想使用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包含在模型的构造函数中,但我感觉这不是正确的解决方案。
是否有更好或“正确”的方法来实现此验证?
提前致谢。