实体框架使用存储库进行域验证

时间:2016-12-13 13:13:34

标签: entity-framework validation design-patterns

我正在尝试一些事情,下面是详细信息:

我已经使用IValidatableObject实现了域类,因此域可以自行验证。我认为这是一种很好的做法,以确保对象在提交到持久状态之前是有效的,包括所需的任何依赖实体。

我想要做的是创建一个具有通用实现的通用存储库,代码如下:

public class Repository<T> : IRepository<T> where T : IValidatableObject
{
    public int Save(T obj)
    {
        var validationResult = obj.Validate(new ValidationContext(this, null, null)).ToList();
        if (validationResult.Any())
        {
            var inner = new StringBuilder();
            foreach (var result in validationResult)
            {
                inner.Append(result.ErrorMessage + $"\n\r");
            }
            throw new ValidationException("Not all validation rules passed, please see inner exception for more detail", new Exception(inner.ToString()));
        }

        //if we reach here then, all validations have passed
        return 0;
    }
}

此IRepository未由任何其他域类实现,并且尚未构建业务层。

我想要做的是当调用Save(T obj)时它应该在“obj”上运行验证。

这是正确的方法吗?

我想这样做,明天,实施可以通过DI轻松改变。

此外,业务类必须初始化IRepository(DI),这意味着只有在业务层和其他地方才能进行更改。

0 个答案:

没有答案