新しいエンティティのラベルが一意であることを確認する必要があるビュー モデルがあります (まだ DB にはありません)。
現時点では、ビューモデルクラスでそれを行いました:
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (PowerOrDuty != null)
{
if (PowerOrDuty.Identifier == null)
{
using (var db = new PowersAndDutiesContext())
{
var existingLabels = db.PowersAndDuties.Select(pod => pod.Label);
if (existingLabels.Contains(PowerOrDuty.Label))
{
yield return new ValidationResult("Cannot create a new power or duty because another power or duty with this label already exists");
}
}
}
......
これは小さな DB を使用した小さな内部アプリであり、私の時間は限られているため、コードは完全ではないことに注意してください。
ビュー モデルからの DB アクセスは、よくない方法だと思います。ビュー モデルには直接 DB アクセスが必要ですか? リポジトリを呼び出して利用可能なラベルを取得できるようにする必要がありますか? 代わりに、DB アクセスを必要とする検証をコントローラーで行う必要がありますか?